If we have these simple models:

db.define_table('person', 
Field('name', 'string'))

db.define_table('common_allergies',
Field('name', 'string'))

The common_allergies is a table full of common allergies that people may 
have like 'peanuts' or 'bee stings'. This table is pre-populated by the 
system.

When a user fills out a form, the form asks two things: the person's name 
and the person's allergies.

The form for the person's name is a simple string text input. But the list 
of allergies the person can select needs to be checkboxes. 


I have something like this:

fields = []
allergies = db().select(db.common_allergies.ALL)

for allergy in allergies:
    fields.append(Field('allergy', 'boolean', default=allergy.name))

form = SQLFORM.factory(db.person, *fields)

if form.process().accepted:
      # Check to make sure the list of values returned from the allergy 
checkboxes exist in the common_allergies table. If it doesn't exist, fail 
the form validation

      # If all checks went well, insert this person's data into respective 
database tables.

There are two problems with this:
 
  - The boolean fields 'allergy' only shows one checkbox, which is the last 
one in the list when I do {{=form.custom.widget.allergy}} in the view. How 
do I get back a list of allergies that have been checked by the user?

  - The value of the checkbox can be changed on the clientside and then 
submitted. How would I check against this and make sure that the submitted 
allergy values exist in the database table? Assuming I have a list returned 
to me, I could do something like this inside form.process().accepted:

if form.process().accepted:
         should_save = True
         for allergy in checked_allergies:
               check = db(db.common_allergies.name==allergy).select()
               if check.is_empty():
                     # error the form
                     should_save = False
               
         if should_save:
                  # Save the user's data

But this seems a bit messy and complicated.

How would I generate the checkboxes for the common_allergies table and how 
would these checkbox values be validated against the database table to 
prevent client-side tampering?

-- 
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/groups/opt_out.

Reply via email to