2014-01-20 38 views
0

在我的模型我有像這樣定義的表:NOT NULL沒有出現在web2py的數據庫表中?

db.define_table('address', 
    Field('address1','string'), 
    Field('address2','string'), 
    Field('city','string'), 
    Field('state','string'), 
    Field('postal_code','string'), 
    Field('country','string'), 
    ) 

db.address.address1.notnull = True 
db.address.city.notnull = True 
db.address.country.notnull = True  

然而,當數據庫(PostgreSQL的)生成此表中的相關字段沒有NOT NULL約束。爲什麼?以及如何確保添加NOT NULL約束?

回答

1

當調用db.define_table()時,遷移(包括創建尚不存在的表)將完成,因此任何影響實際數據庫模式的屬性都必須包含在初始字段定義中,而不是之後(可以將web2py-在調用db.define_table()之後的特定字段屬性,例如「表示」,「要求」,「默認」,「可讀」等)。所以,應該是:

Field('address1','string', notnull=True) 
+0

感謝這部作品在正常不過的字段似乎對國外關鍵領域,如'場(「CUSTOMER_ID」,「參考客戶,NOTNULL = TRUE)'工作,它不會。爲什麼?我怎樣才能在外鍵字段上獲得NOT NULL? – User

+0

不確定這是爲什麼,但不認爲您目前可以在web2py中執行此操作。請注意,爲了在提交表單時強制執行notnull,您可以(或另外)執行'Field('address1',requires = IS_NOT_EMPTY())''。這將在表單提交時在UI中提供驗證和友好的錯誤消息(而不是簡單地拋出一個數據庫異常並返回一個500錯誤,這就是'notnull = True'所能得到的結果)。 – Anthony

相關問題