Move the requires from inside the field definition to after the table definition. web2py will not allow a reference to a field that has not been created.
On Apr 12, 12:01 pm, Mike <[email protected]> wrote: > I know this question has been asked and answered before, but I am > having errors in implementation and I feel like it's something really > silly. If anyone can point anything obvious out that I am missing, > please let me know. Basically I am trying to implement so that two > rows can not have the same combination of Invoice + SKU. Now when I > just got to the web2py admin database editor I am getting these > errors. > > Thanks in Advance! > > Error message: > > Traceback (most recent call last): > File "/home/msheiny/Dropbox/web2py/gluon/restricted.py", line 188, > in restricted > exec ccode in environment > File "/home/msheiny/Dropbox/web2py/applications/mycybersoft/models/ > mycyber_model.py", line 5, in <module> > Field('Invoice', > type='integer',requires=(IS_NOT_EMPTY(),IS_INT_IN_RANGE(1, > 9999999,error_message=T('Needs to be between 1 - > 9999999')),IS_NOT_IN_DB(db(db.software_database.SKU==request.vars.SKU),'software_database.Invoice')), > File "/home/msheiny/Dropbox/web2py/gluon/dal.py", line 3904, in > __getattr__ > return self[key] > File "/home/msheiny/Dropbox/web2py/gluon/dal.py", line 3898, in > __getitem__ > return dict.__getitem__(self, str(key)) > KeyError: 'software_database' > > Database in question with validator on Invoice field: > > db.define_table('software_database', > Field('Invoice', > type='integer',requires=(IS_NOT_EMPTY(),IS_INT_IN_RANGE(1, > 9999999,error_message=T('Needs to be between 1 - > 9999999')),IS_NOT_IN_DB(db(db.software_database.SKU==request.vars.SKU),'software_database.Invoice')), > label=T('Invoice Number')), > Field('Company_Name', > type='string',requires=(IS_NOT_EMPTY(),IS_IN_DB(db,'auth_user.Company','',zero=T('choose > one'))), > label=T('Company Name')), > > Field('Start_Date','date',default=now,writable=False,requires=(IS_NOT_EMPTY(),IS_DATE()),label=T('Start > Date')), > > Field('Expire_Date','date',default=thirtydaysout,requires=(IS_NOT_EMPTY(),IS_DATE()),label=T('Expiration > Date')), > Field('SKU', requires=IS_IN_DB(db,'cyber_skus.SKU','% > (SKU)s',zero=T('CyberSoft Product')),label=T('SKU')), > Field('NumOfCopies', > type='integer',requires=IS_NOT_EMPTY(),label=T('Number of Copies')), > Field('Comments', type='string',label=T('Optional Comments')), > Field('Assoc_Usernames', 'list:reference auth_user'), > format='%(username)s', > migrate=settings.migrate)

