this was an example db.invoice_item.count.requires=LESS_THAN (db,db.ware.id==request.vars.id,'count')
In particular you need to replace "db.ware.id==request.vars.id" with the proper condition to identify the db.ware record to be used to get db.ware.count necessary to validate db.invoice_item.count. The try can fail if 1) the record does not exist, 2) the value is not an int, 3) the if condition is false. I did not try run because I do not have your model, it so it is possible there is a typo. Massimo On Jan 10, 4:01 pm, Julius Minka <[email protected]> wrote: > without understanding much about how it works I put following (trying to > correct what I believed to be typos) to my model: > > class LESS_THAN: > def __init__(self,db,query,field,error_message='Na sklade nie je > požadované množstvo'): > self.db,self.query,self.field=db,query,field > self.error_message=error_message > def __call__(self,value): > try: > value=inv(value) > records=self.db(self.query).select(limitby=(0,1)) > if value<0 or value>=records[0][self.field]: raise > return (value,None) > except: > return (value,self.error_message) > > db.invoice_item.count.requires=LESS_THAN(db,db.ware.id==request.vars.id,'count') > > It raises error in every case. What could be the problem? I would be > very thankful if somebody could explain "try" section to me. > > Julius > > On So, 2009-01-10 at 07:17 -0800, mdipierro wrote: > > > class LESS_THAN > > def __init__(self,db,query,field,error_message='...'): > > self.db,self.query,self.field=db,query,field) > > self.error_message=error_message > > def __call__(self,value): > > try: > > value=inv(value) > > records=self.db(self.query).select(limitby=(0,1)) > > if value<0 or value>=records[0][self.field]: raise > > return (value,None) > > except: > > return (value,self.error_message) > > > db.invoice_item.count.requires=IS_IN_DB > > (db,db.ware.id==request.vars.id,'count') > > > On Jan 10, 5:28 am, Julius Minka <[email protected]> wrote: > > > db.define_table('invoice_item', > > > SQLField('invoice_nr',required=True), > > > SQLField('ware',db.ware,required=True), > > > SQLField('discount','double',required=True), > > > SQLField('count','double',required=True)) > > > db.invoice_item.ware.requires=IS_IN_DB(db,'ware.id','%(artnr)s%(size)s') > > > > How to validate "count" field to be less or equal than db.ware.count in > > > corresponding record of table db.ware based on choice made by > > > invoice_item.ware? > > > To tell it simply, in human words: how to not sell more items than I > > > currently have? > > > > I saw some validation examples in archives using IS_EXPR or custom > > > validators, but in those all relationships between fields stayed inside > > > the same table. > > > > Julius --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---

