Hello, I'm trying to use a variable from a form in an onupdate function, but because I've set it to writeable=False in the controller, it doesn't get passed in form.vars. In more depth:
I've got a table for volunteers to post offers of help on a project. Those have to be approved by an admin before becoming visible, but I don't want the admin to be able to change the original data. So, I have this as my table: db.define_table('help_offered', Field('volunteer_id', 'reference auth_user'), Field('volunteer_type', requires=IS_IN_SET(volunteer_type), notnull=True ), Field('available_from','date', notnull=True), Field('admin_status','string', requires=IS_IN_SET(['Pending', 'Approved' ,'Rejected']), Field('approval_notes','text'), For users, I just have a SQLFORM, which just doesn't show the two admin fields (admin_status and approval_notes): def volunteer(): form = SQLFORM(db.help_offered, fields =['volunteer_type', 'research_statement', 'available_from']) Now for admin users, I want a table of pending offer, where they can view records but only edit those two admin fields. So, SQLFORM.grid fits perfectly: def administer_volunteers(): # lock down which fields can be changed db.help_offered.volunteer_id.writable = False db.help_offered.volunteer_type.writable = False db.help_offered.available_from.writable = False # get a query of pending requests with user_id form = SQLFORM.grid(query=(db.help_offered.admin_status == 'Pending'), csv=False, fields=[db.help_offered.volunteer_id, db.help_offered.volunteer_type, db.help_offered.available_from], deletable=False, editable=True, create=False, details=False, onupdate = update_administer_volunteers) However, now I want to email the volunteers the decision, so onupdate does this: def update_administer_volunteers(form): # Email the decision to the proposer row = db(db.auth_user.id == form.vars.volunteer_id).select().first() volunteer_email = row.email volunteer_fn = row.first_name # alternatives if form.vars.admin_status == 'Approved': mail.send(to=volunteer_email, subject='Decision', message='Approved' elif form.vars.admin_status == 'Rejected': mail.send(to=volunteer_email, subject='Decision', message='Rejected') else: pass But, form.vars only contains the writable fields and the row id: admin_status : Approved approval_decision_date : 2016-03-10 approval_notes : Sounds good approver_id : 1L id : 3L I've seen solutions using hidden but I don't want to hide the field, just make it read only, and I can't work out how to insert volunteer_id back into my form. I could look up id in help_offered and then get the volunteer_id that way but that seems like an unnecessary extra step! A long post for a simple question! -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.