Odoo 的模型關(guān)聯(lián)是直接使用postgresql數(shù)據(jù)庫(kù)的表外鍵。Odoo的寫(xiě)法如下:
instructor_id = fields.Many2one('res.partner', string="Instructor")
course_id = fields.Many2one('openacademy.course',
ondelete='cascade', string="Course", required=True)
其中ondelete屬性值,對(duì)應(yīng)postgresql的外鍵約束 ON DELETE,取值說(shuō)明:
NO ACTION
如果違反外鍵約束會(huì)產(chǎn)生一個(gè)錯(cuò)誤。如果約束被延遲,那么到事務(wù)結(jié)束檢查約束時(shí)如果仍然因?yàn)榇嬖谝粋€(gè)引用行而違反外鍵約束,則仍會(huì)產(chǎn)生錯(cuò)誤。這是默認(rèn)值。其他的動(dòng)作action都不能被延遲。
RESTRICT
違反外鍵約束會(huì)產(chǎn)生一個(gè)錯(cuò)誤。
CASCADE
級(jí)聯(lián)刪除或更新。分別刪除一個(gè)引用行或者更新一個(gè)引用列的值。
SET NULL
設(shè)置引用列(referencing column(s))的值為null
SET DEFAULT
設(shè)置引用列為其缺省值。如果缺省值不是null,那么仍然需要被引用表中有一條記錄的被引用字段的值與之匹配,否則操作會(huì)失敗。