删除时出现外键错误

时间:2017-03-17 21:28:03

标签: python mysql django django-models

我在django中有以下模型:

class ItemInstance(models.Model):
    item_type = models.ForeignKey('ItemContentType', related_name='item_type')
    name = models.CharField(max_length=256)

class TerritoryPricing(models.Model):
    item = models.ForeignKey(ItemInstance, null=True)
    territory = models.CharField(max_length=256)

但是,当我删除ItemInstance时,我总是会遇到IntegrityError。这是一个示例错误:

>>> ItemInstance.objects.filter(pk=123).delete()
  

IntegrityError:(1452,'无法添加或更新子行:外键约束失败(availsmain_territorypricing,CONSTRAINT main_territorypricing_ibfk_1 FOREIGN KEY({{1参考文献item_idmain_iteminstance))')

这刚刚开始发生,所以也许在我的django app或django db中有一些缓存信息。我该怎么办呢?现在,我要做的是:

id

2 个答案:

答案 0 :(得分:1)

我认为您有一个参考完整性错误,因为ForeignKey没有为子行中的FK字段指定on_delete操作。例如,尝试设置on_delete=models.SET_NULL,在删除相关对象后将FK字段设置为NULL

item = models.ForeignKey(ItemInstance, null=True, on_delete=models.SET_NULL)

您需要进行迁移并应用它们来更新数据库中的字段。

答案 1 :(得分:1)

外键定义中没有null=True,而是拥有自己的模型句柄:

item = models.ForeignKey(ItemInstance, on_delete=models.SET_NULL)

这将解决您上面的FK错误。