Django“无法添加或更新子行:外键约束失败”

我有一个模型Coupon ,以及一个带有ForeignKey的模型Photo

 class Photo(models.Model): coupon = models.ForeignKey(Coupon, related_name='description_photos') title = models.CharField(max_length=100) image = models.ImageField(upload_to='images') 

我在pipe理员中设置内联,所以现在我可以从pipe理员添加照片到优惠券。

我试图添加一个,上传成功,但是我得到了Django的debugging页面,出现这个错误:

 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数据库有一个稍微不同的数据集,它的工作,所以也许有松散的数据在我当前的数据库? 我如何find并删除它?

我的一些表在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的解决scheme工作,但注意 ,对于Django <= 1.2多个数据库支持之前),设置如下所示:

 DATABASE_OPTIONS = {"init_command": "SET foreign_key_checks = 0;"} 

值得注意的是,Ram Rachum似乎已经解决了问题而不是解决了问题:MyISAM根本不支持事务…

有时这个错误的原因是先保存子表,然后保存父。
解决这个是用的
1)。 DATABASES = { 'default': { ...
'OPTIONS': { "init_command": "SET foreign_key_checks = 0;", }, } }

2)。 检查您的数据库操作stream程,并使其父 – >子

另一个select是放弃你的MySQL表中的限制:

 alter table <TABLE_NAME> drop foreign key <CONTRAINT_NAME>;