Thanks for the code you posted. Yes, something like this should be included in web2py. Let me give it some more thought.
Validators are not applied by import_from_csv_file because the CSV format is not the same as the forms. Massimo On Mar 25, 2:44 pm, johann.scheibelho...@easytouch-edv.com wrote: > Massimo, > > thanks to your code example I managed to get this somehow into the > model side of things. Reason is because for later maintenance I think > that multi column unique keys should be set/managed on database/model > layer. > > 1) I had to 'exclude' the checking of the current record - hence only > checking all other records in that table for duplicates (=uniqueness) > - in oder to get update forms working. Without that the update form > would always throw the 'already in database' error message = update > function lost. Can you confirm if that is a good solution without > negative side effects? > > 2) csv imports do not apply these validator. how could that be fixed > best? > > 3) can this multi column key solution - once its fully working - be > integrated into future versions of web2py in order that the workaround > construct could be replaced by something like the 1st line of > commented code below? > > #db.shapecolormonth.colorname.requires=[IS_IN_DB(db,'colorname.id','% > (name)s'),IS_NOT_IN_DB(db > ((db.shapecolormonth.shapename==request.vars.shapename)& > (db.shapecolormonth.month==request.vars.month)),db.shapecolormonth.colorname)] > > # vvvvvvvvvvvvvvvvvvvvvvv workaround construct begins here > vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv > # +) the following construct replaces the broken dropdown function of > the previous commented line of code > # 1) had to add '&(db.shapecolormonth.id!=request.vars.id)' into the > IS_NOT_IN_DB parameters in order to get update froms accepting > # 2) remaining issue: csv import does not apply this validator! > > class MY_ODD_VALIDATOR(IS_IN_DB): > def __init__(self,*a,**b): IS_IN_DB.__init__(self,*a,**b) > def __call__(self,value): > e=IS_IN_DB.__call__(self,value) > if e[1]: return e > e=IS_NOT_IN_DB(db > ((db.shapecolormonth.shapename==request.vars.shapename)& > (db.shapecolormonth.month==request.vars.month)&(db.shapecolormonth.id! > =request.vars.id)),db.shapecolormonth.colorname)(value) > return e > > db.shapecolormonth.colorname.requires=MY_ODD_VALIDATOR > (db,'colorname.id','%(name)s') > # ^^^^^^^^^^^^ end of workaround construct > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > > --Hans > > On Mar 25, 2:56 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > > > My suggestion is use the validators for the drop box only, define > > > def my_check(form): > > if db( (db.shapecolormonth.shapename==form.vars.shapename) & > > (db.shapecolormonth.shapecolor==form.vars.shapecolor) & > > (db.shapecolormonth.month==form.vars.month) ).count(): > > form.errors.month='sorry, shape+color+month combo have to be > > unique' > > return > > > then in SQLFORM set > > > SQLFORM(....,onvalidation=my_check) > > > This is not the only solution. You could do everything with > > validators, but this solution is simpler. > > > Massimo --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to web2py@googlegroups.com To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---