Massimo,
here's what I wrote in gluon/validator.py :
class IS_NOT_IN_DB_WITH_DROP(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.u.unit_id==request.vars.unit_id),'u.zd_id')(value)
return e
and in my db.py:
db.u.zd_id.requires=IS_NOT_IN_DB_WITH_DROP(db,'zonedef.id','%(nom)s')
and I've got an error :
File "gluon/validators.py", line 723, in __call__
e=IS_NOT_IN_DB(db
(db.u_implantee.unit_id==request.vars.unit_id),'u_implantee.zd_id')
(value)
NameError: global name 'db' is not defined
It seems it's normal, because code in validator.py may be generic one.
So,
Is it correct to put my validator code in validator.py ?
Maybe you wanted I put it somewhere else ?
Please, forgive my lack of experience
T
On 6 jan, 19:00, mdipierro <[email protected]> wrote:
> for now use this. This is a case I never should about before.
>
> 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.u.unit_id==request.vars.unit_id),'u.zd_id')(value)
> return e
>
> db.u.zd_id.requires=MY_ODD_VALIDATOR(db,'zonedef.id','%(nom)s')
>
> On Jan 6, 11:40 am, tknack <[email protected]> wrote:
>
> > Hi Massimo,
>
> > Yes, it works ! But when I try to use IS_NOT_IN_DB with IS_IN_DB, I
> > can't obtain a drop down list, even if I change the order of the
> > lines. Here's my code :
>
> > db.define_table('zonedef',
> > SQLField('nom'))
>
> > db.zonedef.nom.requires=[IS_NOT_EMPTY(error_message='can't be
> > empty!'),IS_NOT_IN_DB(db,'zonedef.nom')]
>
> > db.zonedef.represent=lambda zonedef:
> > A(zonedef.nom,_href=t2.action('update',zonedef.id))
>
> > db.define_table('u_name',
> > SQLField('nom'),
> > SQLField('description',length=128))
>
> > db.define_table('u',
> > SQLField('unit_id',db.u_name),
> > SQLField('zd_id',db.zonedef),
> > SQLField('nb_u','double'))
>
> > db.u.zd_id.requires=IS_IN_DB(db,'zonedef.id','%(nom)s')
> > db.u.unit_id.requires=IS_IN_DB(db,'u_name.id','%(nom)s : (description)
> > s')
>
> > db.u.zd_id.requires=IS_NOT_IN_DB(db
> > (db.u.unit_id==request.vars.unit_id),'u.zd_id')
>
> > Can you help me to fix it, Massimo ?
>
> > On 12 déc 2008, 23:24, mdipierro <[email protected]> wrote:
>
> > > No. validators are associated to one field in the sense that only one
> > > field will report the error.
>
> > > db.define_table('t',SQLField('f1'),SQLField('f'2'))
> > > db.t.f2.requires=IS_NOT_IN_DB(db(db.t.f1==request.vars.f1),'t.f2')
> > > OR
> > > db.t.f1.requires=IS_NOT_IN_DB(db(db.t.f2==request.vars.f2),'t.f1')
>
> > > are equivalent and do exactly what you ask. except that the former
> > > associates the error with the f1 value and the second to the f2 value.
> > > They both generate the query
>
> > > db((db.t.f1==request.vars.f1)&(db.t.f2==request.vars.f2)).count()
>
> > > Massimo
>
> > > On Dec 12, 4:01 pm, DenesL <[email protected]> wrote:
>
> > > > On Dec 12, 4:07 pm, mdipierro <[email protected]> wrote:
>
> > > > > I still do not see why you cannot use IS_NOT_IN_DB(sqlset,....) You
> > > > > must have access to the variables that you want tovalidate.
>
> > > > Correct me if I am wrong but IS_NOT_IN_DB only looks at the value of
> > > > one field.
> > > > From validators.py:
> > > > rows=self.dbset(field=value).select(limitby=(0,1))
>
> > > > What we are thinking is:
> > > > [field1value,field2value,field3value,...] as a row is not in the DB.
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"web2py Web Framework" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---