これが私のデータベース定義です:
db.define_table('emsAlertTokens',
Field('emsrelease','string',default=session.releasefield,writable=False,label=T('Release')),
Field('emsmachine','string',default=session.machinefield,writable=False,label=T('Machine')),
Field('emsstartdate','datetime',default=request.now,label=T('Start Date')),
Field('emsenddate','datetime',IS_NOT_EMPTY(error_message='Please specify the End Date.'), label=T('End Date')),
Field('errorgrepfile','upload',requires=IS_NOT_EMPTY(error_message='Please upload a valid error tokens file'),custom_store=ems_file, custom_retrieve=ems_retrieve, autodelete=True, uploadfield=True, uploadfs=None, label=T('Error Tokens')),
Field('tokenname','string',requires=IS_NOT_EMPTY('What would you call your token file?'),label=T('Token File Name')))
お気づきのとおり、emsmachine フィールドと emsrelease フィールドはセッションからのものです。私の要件は、この 2 つの値の組み合わせを一意にすることです。
以下のバリデーターで試しましたが、うまくいきません。
db.emsAlertTokens.emsrelease.requires = IS_NOT_IN_DB(db(db.emsAlertTokens.emsmachine == session.machinefield), 'emsAlertTokens.emsrelease', error_message='EMS token file already exist for this release.')
これでもうまくいきません:
db.emsAlertTokens.emsrelease.requires = IS_NOT_IN_DB(db(db.emsAlertTokens.emsmachine == request.vars.emsmachine), 'emsAlertTokens.emsrelease', error_message='EMS token file already exist for this release.')
これについて私を助けてください。