That's an issue with your Python code. You should either move the import
outside the function or only import specific objects from the Decimal module
(which is probably a better idea -- "from module import *" is usually not
recommended).
Anthony
On Saturday, July 23, 2011 6:57:54 PM UTC-4, Kenneth wrote:
> Thank you Massimo for your answers.
>
> I can�t get the onvalidation to work.
>
> My code looks like this:
>
> def check(form):
> if ((form.vars.f_internal != 0 and form.vars.f_customer != None) or
> (form.vars.f_internal == 0 and form.vars.f_customer == None)):
> form.errors.f_customer = "a and b cannot be both empty or
> selected"
>
> @auth.requires_login()
> def create_receipt():
>
> from decimal import *
> ......
>
> if form_item.accepts(request.vars, session, onvalidation=lambda
> form_item: check(form_item), formname='receipt_item'):
>
> this results in an error ticket:
>
> Traceback (most recent call last):
> File "/web2py/gluon/restricted.py", line 191, in restricted
> ccode = compile2(code,layer)
> File "/web2py/gluon/restricted.py", line 178, in compile2
> return compile(code.rstrip().replace('\r\n','\n')+'\n', layer, 'exec')
> SyntaxError: import * is not allowed in function 'create_receipt'
> because it is contains a nested function with free variables
> (receipt.py, line 8)
>
> This line 8 is the " from decimal import *" line shown in the example.
>
>
> Kenneth
>
> > As I guess Massimo wanted to post these answers to the list and not
> > only to me, I�ll forward his answers here.
> >
> > On Jul 23, 10:19 am, Kenneth Lundstr�m<[email protected]>
> > wrote:
> >
> >> I m creating a form with SQLFORM that includes 6 fields.
> >>
> >> One field is f_customer with requires IS_IN_DB(....)
> >>
> >> Now I'd like to add a new field not taken directly from database. Lets
> >> call it f_extra.
> >>
> >> f_customer is a drop-down and f_extra would also be a drop-down. Now I
> >> have a list of questions.
> >>
> >> 1) Is it possible to get the form.accepts to validate that either
> >> f_customer or f_extra is selected. Both can t be selected and both can t
> >> be empty? I remember seeing this discussed on the list not long ago, but
> >> could not find it.
> >>
> >> 2) If 1) is not possible then I guess I have to put dbio=False and do
> >> the validation "manually". How do I show the error message the same way
> >> web2py does?
> > yes
> >
> > def check(form):
> > if (form.vars.a and form.vars.b) or (not form.vars.a and not
> > form.vars.b):
> > form.errors.b = "a and b cannot be both empty or selected"
> > form.accepts(...,onvalidation=lambda form: check(form))
> >
> >
> >> 3) Instead of creating a custom layout for this form I d like to add the
> >> field in the controller with something like:
> >> form.element('table').insert(2,TR('label',INPUT(_name='name'))), but how
> >> do I add a SELECT with many OPTIONS? The f_extra field drop-down is
> >> created from two different tables auth_user and t_extra_fields. I guess
> >> I should use query auth_user and t_extra_fields and then create a list.
> >> That list is used to create the drop-down.
> > Is this a FORM or SQLFORM. In the latter case you need a custom
> > widget. In the former case you can do
> >
> > SELECT(*[OPTION(value) for value in ....],**dict(value='default'))
> >
> >
> >> 4) When using the OPTION helper is it possible to have a different value
> >> of the option then what is shown?
> > OPTION('shown value',_value='hidden value')
> >
> >
> >
> >
>
>