我使用django 1.7创建一个postgresql 9.3 db,其中包含几个包含外键约束的表。 DB用于仓库,其中对象具有物理位置。如果一个对象(在表Stored_objects中)被删除,我也想删除它的位置,以便我的位置模型如下:
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;
我还需要做些什么才能在数据库中获得这个约束吗?
答案 0 :(得分:5)
Django使用它自己的代码来处理级联,它们并没有在数据库级别上实现。主要原因是在后端保持一致的行为,并允许模型信号触发级联删除。如果出于某种原因需要在数据库级别上进行约束,则必须自己编辑表。除非你有令人信服的理由(比如另一个应用程序访问数据库,绕过Django),我不建议这样做。