You can't get it in you onupdate function? You already retrieve auth_user row, so I guess instead of use form.vars instance for this piece of information...
Though I am not sure what is exactly you problem... Richard On Thu, Mar 10, 2016 at 1:34 PM, David Orme <[email protected]> wrote: > 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 [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- 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 [email protected]. For more options, visit https://groups.google.com/d/optout.

