django在创建Postgresql-DB时忽略on_delete = Cascade

时间:2015-06-25 10:24:40

标签: django postgresql

我使用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;

我还需要做些什么才能在数据库中获得这个约束吗?

1 个答案:

答案 0 :(得分:5)

Django使用它自己的代码来处理级联,它们并没有在数据库级别上实现。主要原因是在后端保持一致的行为,并允许模型信号触发级联删除。如果出于某种原因需要在数据库级别上进行约束,则必须自己编辑表。除非你有令人信服的理由(比如另一个应用程序访问数据库,绕过Django),我不建议这样做。