Looks like the form.accepts is trying to update the database with the
is_administrator value.  You may need to deal with the update
explicitly.  Have you tried form.accepts(request.vars, session,
dbio=False)?


On Jun 14, 1:21 pm, Ross Peoples <ross.peop...@gmail.com> wrote:
> I am trying to provide an editor for auth_user using SQLFORM. I also am
> trying to add a checkbox to the bottom of the form to set whether or not the
> user is an administrator. If so, then the user gets added to an
> Administrators group when calling form.accepts().
>
> The strange part is, the code works fine if you check the box, then click
> submit, but if you try to uncheck the box, that's when you get the following
> traceback:
>
> 1.
> 2.
> 3.
> 4.
> 5.
> 6.
> 7.
> 8.
> 9.
> 10.
> 11.
> 12.
> 13.
> 14.
> 15.
> 16.
> 17.
> 18.
> 19.
> 20.
> 21.
> 22.
>
> Traceback (most recent call last):
>   File "/media/psf/Python/web2py/gluon/restricted.py", line 192, in restricted
>     exec ccode in environment
>   File 
> "/Users/rosspeoples/Dropbox/Code/Python/web2py/applications/init/controllers/administration.py"
>  <http://127.0.0.1:8001/admin/edit/init/controllers/administration.py>, line 
> 650, in <module>
>   File "/media/psf/Python/web2py/gluon/globals.py", line 137, in <lambda>
>     self._caller = lambda f: f()
>   File "/Users/rosspeoples/Dropbox/Code/Python/web2py/gluon/tools.py", line 
> 2485, in f
>     return action(*a, **b)
>   File 
> "/Users/rosspeoples/Dropbox/Code/Python/web2py/applications/init/controllers/administration.py"
>  <http://127.0.0.1:8001/admin/edit/init/controllers/administration.py>, line 
> 148, in security
>     return update()
>   File 
> "/Users/rosspeoples/Dropbox/Code/Python/web2py/applications/init/controllers/administration.py"
>  <http://127.0.0.1:8001/admin/edit/init/controllers/administration.py>, line 
> 143, in update
>     return user_form(user)
>   File 
> "/Users/rosspeoples/Dropbox/Code/Python/web2py/applications/init/controllers/administration.py"
>  <http://127.0.0.1:8001/admin/edit/init/controllers/administration.py>, line 
> 120, in user_form
>     if form.accepts(request.vars, session):
>   File "/media/psf/Python/web2py/gluon/sqlhtml.py", line 1203, in accepts
>     self.table._db(self.table._id == self.record.id).update(**fields)
>   File "/Users/rosspeoples/Dropbox/Code/Python/web2py/gluon/dal.py", line 
> 5401, in update
>     fields = self.db[tablename]._listify(update_fields,update=True)
>   File "/Users/rosspeoples/Dropbox/Code/Python/web2py/gluon/dal.py", line 
> 4677, in _listify
>     raise SyntaxError, 'Field %s does not belong to the table' % name
> SyntaxError: Field is_administrator does not belong to the table
>
> And here is the controller that is adding the checkbox:
>
>         form = SQLFORM(db.auth_user, user, showid=False)
>         form[0].insert(-1, TR((
>             TD(LABEL('Is Administrator',
> _for='auth_user_is_administrator')),
>             TD(INPUT(_type='checkbox', _name='is_administrator',
> _id='auth_user_is_administrator'))
>         )))
>
>         form.vars.is_administrator = False
>         if user:
>             if auth.has_membership(user_id=user.id, role='Administrators'):
>                 form.vars.is_administrator = True
>
>         if form.accepts(request.vars, session):
>             admin_group =
> db(db.auth_group.role=='Administrators').select().first()
>             db((db.auth_membership.user_id==user.id) &
> (db.auth_membership.group_id==admin_group.id)).delete()
>
>             if form.vars.is_administrator:
>                 db.auth_membership.insert(group_id=admin_group.id,
> user_id=user.id)
>
>             return 'OK'
>
>         return dict(form=form)
>
> The thing that is driving me nuts is that I am doing exactly what the book
> says to do:
>
> http://web2py.com/book/default/chapter/07#Adding-extra-form-elements-...
>
> Any thoughts? Thanks.

Reply via email to