Not sure I understand the test case.
I do not see how this relevant to the onvalidation issue.

If year>1975 than you want to display and validate the field. If
year<=1975 you do not want to display the dropbox and/or ignore its
value.

script=SCRIPT("jQuery('document').ready(function(){var
y=jQuery('year'); y.keyup(function(){var
c=jQuery('#cars_catalytic_converter_type__row');if(parseInt(y.val()>1975)c.show();elsec.hide();});});");

db.define_table('cars',
    Field('make'),
    Field('model'),
    Field('year'),
    Field('catalytic_converter_type',requires =
IS_IN_SET(('one','two','three'),zero=None),
comment=script))


On Nov 26, 6:17 pm, "mr.freeze" <[email protected]> wrote:
> Good point. Here is my use case:
>
> db.define_table('cars',
>     Field('make'),
>     Field('model'),
>     Field('year'),
>     Field('catalytic_converter_type',requires =
> IS_IN_SET('one','two','three'),
> comment='for cars later than 1975'))
>
> I want catalytic_converter_type to be required if the car year is
> greater than 1975. I also want to show an error if
> catalytic_converter_type is selected and the year is less than 1975.
> Allowing the user to see all errors at once would be a bonus but not a
> deal breaker. onvalidation seems like the place to handle it but let
> me know if there is a better way.
>
> On Nov 26, 5:48 pm, mdipierro <[email protected]> wrote:
>
> > Consider this case:
>
> > db.define_table('numbers',Field('a','integre'),Field('b','integer'))
> > def validate(form):
> >     if form.vars.a+form.vars.b>100:
> >         form.errors.b="a+b must not exceed 100"
> > form=crud.create(db.numbers,onvalidation=validate)
>
> > Before the change the function validate is not called if a and b are
> > not valid integer this never triggering an exception, only validation
> > errors.
>
> > With your proposed change this would cause an error because
> > form.vars.a is None if request.vars.a does ot pass the default integer
> > validation. The function validation would be called again and issue a
> > ticket.
>
> > This is a change of behavior. I am not convinced this change is a good
> > idea.
>
> > Why do you need it?
> > Other opinions?
>
> > Massimo
>
> > On Nov 26, 11:34 am, "mr.freeze" <[email protected]> wrote:
>
> > > Changing line 1565 of html.py from...
> > >         if status and onvalidation:
> > > to...
> > >         if vars and onvalidation:
>
> > > On Nov 26, 11:28 am, mdipierro <[email protected]> wrote:
>
> > > > What would you suggest?
>
> > > > On Nov 26, 11:10 am, "mr.freeze" <[email protected]> wrote:
>
> > > > > I see two issues with this:
> > > > > 1) The form errors found in onvalidation will not be displayed if
> > > > > there are already form errors
> > > > > 2) The developer never gets a chance to remove form errors for certain
> > > > > conditions (think contingent form fields)
> > > > > For example, I am using IS_IN_DB on a field but I only want it to be
> > > > > required if another field is a certain value.
>
> > > > > Is there a better way?
>
>

Reply via email to