2015-06-25 48 views
2

我使用django 1.7創建了一個postgresql 9.3 db,其中有幾個包含外鍵約束的表。數據庫用於物體具有物理位置的倉庫。如果一個對象(表Stored_objects)被刪除,我想也想刪除它的位置,讓自己的定位模型的樣子:django忽略on_delete =創建Postgresql-DB時的級聯

class object_positions(models.Model): 

    obj_id = models.ForeignKey(Stored_objects, db_column='obj_id',on_delete=models.CASCADE) 
    (...) 

約束在DB(執行syncdb後),然而長相像這樣:

ALTER TABLE object_positions 
    ADD CONSTRAINT stored_obj_fkey FOREIGN KEY (obj_id) 
     REFERENCES "Stored_objects" (id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION; 

是否還有其他事情我必須做的才能在db中獲得這個約束?

回答

3

Django使用它自己的代碼來處理級聯,它們沒有在數據庫級別上實現。主要原因是在後端保持一致的行爲,並允許模型信號觸發級聯刪除。如果出於某種原因想要在數據庫級別上使用約束,則必須自己編輯表。我不會建議,除非你有一個令人信服的理由(例如另一個應用程序訪問數據庫,繞過Django)。

+0

謝謝。其他幾個程序使用這個數據庫,所以我真的需要級聯由後端執行。 – FooBar