如何解决Django“无法添加或更新子行:外键约束失败”
|| 我有一个模型Coupon
和一个模型Photo
并带有ForeignKey
:
class Photo(models.Model):
coupon = models.ForeignKey(Coupon,related_name=\'description_photos\')
title = models.CharField(max_length=100)
image = models.ImageField(upload_to=\'images\')
我在管理员中设置了内联,因此现在我可以从管理员将照片添加到优惠券中。
我尝试添加一个,并且上传成功,但是随后出现此错误的是Django的调试页面:
IntegrityError at /admin/coupon/coupon/321/
(1452,\'Cannot add or update a child row: a foreign key constraint fails (`my_project`.`coupon_photo`,CONSTRAINT `coupon_id_refs_id_90d7f06` FOREIGN KEY (`coupon_id`) REFERENCES `coupon_coupon` (`id`))\')
这是什么,我该如何解决?
(如果重要,这是一个MySQL数据库。)
编辑:我在具有稍微不同的数据集的Sqlite3数据库上尝试过它,并且它起作用了,所以也许在我当前的DB中有松散的数据?如何找到并删除它?
解决方法
我的某些表位于InnoDB中,而某些表位于MyISAM中...我将所有内容都更改为MyISAM,问题已解决。
,
DATABASES = {
\'default\': {
...
\'OPTIONS\': {
\"init_command\": \"SET foreign_key_checks = 0;\",},}
}
(根据官方文件)
在早期版本的Django中,使用InnoDB存储引擎时,带有正向引用(即与尚未插入数据库的行的关系)的灯具将无法加载。这是由于InnoDB通过立即检查外键约束而不是将检查推迟到提交事务之前而偏离了SQL标准。此问题已在Django 1.4中解决。
, 为了避免这种情况的发生,您还可以在settings.py中设置STORAGE_ENGINE
。
对于Django> = 1.2
DATABASES = {
\'default\': {
...
\'STORAGE_ENGINE\': \'MyISAM / INNODB / ETC\'
}
}
对于Django <= 1.2
DATABASE_STORAGE_ENGINE = \"MyISAM / INNODB / ETC\"
请注意,这仅对MySQL有效
, 我遇到了同样的问题:mmrs151的解决方案有效,但请注意,对于Django <= 1.2
(即在支持多个数据库之前),设置如下所示:
DATABASE_OPTIONS = {\"init_command\": \"SET foreign_key_checks = 0;\"}
值得一提的是,Ram Rachum似乎是在解决问题而不是解决了问题:MyISAM根本不支持交易...
, 有时,此错误的原因是尝试先保存子表,然后再保存父表。
解决方案正在使用。
DATABASES = {
\'default\': {
...
\'OPTIONS\': {
\"init_command\": \"SET foreign_key_checks = 0;\",}
}
2)。检查您的数据库操作流程并使其ѭ12
, 另一个选择是将约束放置在MySQL表中:
alter table <TABLE_NAME> drop foreign key <CONTRAINT_NAME>;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。