首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django未在DELETE = CASCADE上设置MySQL

问Django未在DELETE = CASCADE上设置MySQL
EN

Stack Overflow用户
提问于 2011-12-30 01:10:54
回答 3查看 2.4K关注 0票数 4

我使用的是带有MySQL 5.5数据库后端的Django 1.3。我的假设是,当通过syncdb构建数据库时,Django默认情况下会模拟相关对象的ON DELETE级联效果。但是,检查数据库会发现,ON DELETE属性实际上设置为"RESTRICT“。这是一个bug吗?因为我无法删除相关记录,所以在删除具有相关对象的对象时,我在djang-admin中一直收到IntegrityError消息。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-30 09:40:17

由于某种原因,Django 1.3.1似乎无法将ON DELETE CASCADE属性应用于表。这可能与运行在Windows上的MySQL-python 1.2.3接口有关。解决此问题的唯一其他方法是通过custom SQL。

票数 2
EN

Stack Overflow用户

发布于 2011-12-30 09:56:16

Django在Python中模拟DELETE CASCADE --这就是为什么不需要在数据库表上设置它的原因。事实上,设置RESTRICT甚至可能是有意义的,因为它意味着您不能在没有管理员警告的情况下意外删除任何相关对象。

在您的情况下,您可能设置了Django不知道的外键约束--或者您可能试图通过原始SQL删除;我无法从您的问题中判断出来。

如果问题是您不能从管理员或ORM中删除,那么您需要确保正确定义了模型。django将负责收集相关对象并执行级联本身。

如果问题是删除操作在原始SQL中不起作用,那么您需要首先手动删除相关对象,或者放松SQL约束--在这种情况下,将其更改为cascade可能是正确的解决方案。

票数 6
EN

Stack Overflow用户

发布于 2011-12-30 01:17:25

默认情况下,Django是级联的。我真的不确定为什么你会得到一个ON DELETE限制。Django 1.3确实允许您在删除过程中选择alternate (在定义字段时使用on_delete kwarg ),如果您继承了代码库,可能有人之前已经这样做了,然后将其从代码中删除,但却忽略了更新数据库。

我建议手动修改该列,将其设置回ON DELETE CASCADE。然后简单地从那里继续前进。正如我所说的,这是开发人员必须告诉Django不要做的事情;它默认情况下是级联的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8670920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档