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>;
    

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...