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
-~----------~----~----~----~------~----~------~--~---

Reply via email to