我使用的是带有MySQL 5.5数据库后端的Django 1.3。我的假设是,当通过syncdb构建数据库时,Django默认情况下会模拟相关对象的ON DELETE级联效果。但是,检查数据库会发现,ON DELETE属性实际上设置为"RESTRICT“。这是一个bug吗?因为我无法删除相关记录,所以在删除具有相关对象的对象时,我在djang-admin中一直收到IntegrityError消息。
谢谢
发布于 2011-12-30 09:40:17
由于某种原因,Django 1.3.1似乎无法将ON DELETE CASCADE属性应用于表。这可能与运行在Windows上的MySQL-python 1.2.3接口有关。解决此问题的唯一其他方法是通过custom SQL。
发布于 2011-12-30 09:56:16
Django在Python中模拟DELETE CASCADE --这就是为什么不需要在数据库表上设置它的原因。事实上,设置RESTRICT甚至可能是有意义的,因为它意味着您不能在没有管理员警告的情况下意外删除任何相关对象。
在您的情况下,您可能设置了Django不知道的外键约束--或者您可能试图通过原始SQL删除;我无法从您的问题中判断出来。
如果问题是您不能从管理员或ORM中删除,那么您需要确保正确定义了模型。django将负责收集相关对象并执行级联本身。
如果问题是删除操作在原始SQL中不起作用,那么您需要首先手动删除相关对象,或者放松SQL约束--在这种情况下,将其更改为cascade可能是正确的解决方案。
发布于 2011-12-30 01:17:25
默认情况下,Django是级联的。我真的不确定为什么你会得到一个ON DELETE限制。Django 1.3确实允许您在删除过程中选择alternate (在定义字段时使用on_delete kwarg ),如果您继承了代码库,可能有人之前已经这样做了,然后将其从代码中删除,但却忽略了更新数据库。
我建议手动修改该列,将其设置回ON DELETE CASCADE。然后简单地从那里继续前进。正如我所说的,这是开发人员必须告诉Django不要做的事情;它默认情况下是级联的。
https://stackoverflow.com/questions/8670920
复制相似问题