Are we talking about different approaches here?
I am now certain I did something wrong the first time around. I made a simple
test as follows:
In db.py:
db.define_table('people',
Field('name', 'string'))
In people.py (controller):
def func(form):
session.flash = T('Onvalidation called')
def index():
form = SQLFORM(db.people)
if form.accepts(request.vars, session, onvalidation=func):
pass
return dict(form=form)
I get the flash every time I submit the form, so the function is definitely
called. Also, if I try to replace it with an undeclared function, I get a
ticket with NameError: global name 'undeclaredfunc' is not defined.
Tried with and without regular validators in the table definition. Only case
where the onvalidation function is not called is when one of the regular
validators does not validate.
I also did verify it works when updating a record, atleast with this simple
example.
Regards,
Jens Örtenholm
[email protected]
11 apr 2011 kl. 16.40 skrev VP:
> I have checked again and inserted an undeclared function call into the
> custom validator and figured out that it is not called at all.
>
> Something is wrong.
>
> On Apr 8, 9:52 am, Massimo Di Pierro <[email protected]>
> wrote:
>> This may be a bug. Will look into it...
>>
>> On Apr 8, 2:31 am, Jens Örtenholm <[email protected]> wrote:
>>
>>
>>
>>
>>
>>
>>
>>> Hello everyone,
>>
>>> I believe I've found a bug in SQLFORM.accepts.
>>
>>> When calling with an onvalidation function as:
>>
>>> form = SQLFORM(db.table)
>>> if form.accepts(request.vars, session, onvalidation=function):
>>
>>> And the function sets an error:
>>
>>> def function(form):
>>> form.errors.myfield = 'This is an error'
>>
>>> The form is still accepted, DB is inserted or updated with the record.
>>
>>> As far as I can tell from looking at the code in SQLFORM.accepts, the case
>>> where ret value is False because of form.errors not being empty is not
>>> handled anywhere.
>>
>>> Tested on 1.94.6
>>
>>> //Jens