Hello web2py users!
I'm trying to use the onvalidation function in SQLFORM, but isn't
working very well.
When I use SQLFORM as insert form, everything works fine. But when I
change it to update/detele form (with adding request.args(1) into
SQLFORM; request.args(1) gives me record's ID, whitch I want to edit)
then everytime the validation not pass, it ends with error:
Traceback (most recent call last):
File "d:\Programy\web2py\web2py_newest\gluon\restricted.py", line
188, in restricted
exec ccode in environment
File "d:/Programy/web2py/web2py_newest/applications/projekty/
controllers/spravce.py", line 116, in <module>
File "d:\Programy\web2py\web2py_newest\gluon\globals.py", line 95,
in <lambda>
self._caller = lambda f: f()
File "d:/Programy/web2py/web2py_newest/applications/projekty/
controllers/spravce.py", line 110, in role_edit
if form.accepts(request.vars, session,
onvalidation=role_validace_edit):
File "d:\Programy\web2py\web2py_newest\gluon\sqlhtml.py", line 1025,
in accepts
if self.table[key].type == 'upload' \
File "d:\Programy\web2py\web2py_newest\gluon\dal.py", line 3768, in
__getitem__
return dict.__getitem__(self, str(key))
KeyError: 'my_error'
<type 'exceptions.KeyError'>('my_error')
here is my controller code:
def role_validace_edit(form):
for i in xrange(0, len(session.role)):
if
int(form.vars.group_id)==session.role[i].auth_membership.group_id:
form.errors.my_error = "role already exists!"
def role_edit():
session.role =
db(db.auth_membership.user_id==session.uzivatel_data.id).select(db.auth_membership.id,
db.auth_group.description, db.auth_membership.group_id,
left=db.auth_group.on(db.auth_group.id==db.auth_membership.group_id))
form = SQLFORM(db.auth_membership, request.args(1), fields =
['group_id'], labels = {'group_id':'Název role'})
form.vars.user_id=session.uzivatel_data.id
if form.accepts(request.vars, session,
onvalidation=role_validace_edit):
response.flash = 'form accepted'
elif form.errors:
response.flash = form.errors.my_error
return dict(form=form)
Am I doing something wrong? Again, when I change it to insert SQLFORM,
it works fine. Please help me.
Tomas