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.