2012-06-26 43 views
1

我有三個字段必須在表中唯一,並且基於answer to this question我嘗試了以下(我認爲我明白了這一點,但顯然不是......猴子看,猴子):web2py中的三字段複合關鍵字

db.define_table('Person_certification', 
       Field('Person', db.Person), 
       Field('Certification', db.Certification), 
       Field('Start_date', 'date', 
        requires=IS_NOT_IN_DB(db(db.Person_certification.Person==request.vars.Person 
              & dp.Person_certification.Certification==request.vars.Certification), 
             'Person_certification.Start_date')), 
       Field('End_date', 'date'), 
       format='%(Person)s %(Certification)s') 

這三個字段是Person,Certification和Start_date。當我嘗試使用此我得到:

<type 'exceptions.KeyError'> 'Person_certification'

追溯是指「需要」線。 (表中已經有數據(並且在三個字段中沒有重複);是否在SELECT期間試圖進行檢查的代碼?)

我在這裏丟失了什麼?

回答

1

對不起,原來的答案是不正確的(現在修復)。由於表格尚未定義,因此您無法在表格定義中引用它。相反,在表定義之後設置驗證程序:

db.Person_certification.start_date.requires = IS_NOT_IN_DB(...) 
+0

完美。還必須將術語括起來:db.Person_certification.Start_date.requires = IS_NOT_IN_DB(db((db.Person_certification.Person == request.vars.Person)&(db.Person_certification.Certification == request.vars.Certification )),'Person_certification.Start_date'); – MichaelF