我在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,'无法添加或更新子行:外键约束失败(
avails
。main_territorypricing
,CONSTRAINTmain_territorypricing_ibfk_1
FOREIGN KEY({{1参考文献item_id
(main_iteminstance
))')
这刚刚开始发生,所以也许在我的django app或django db中有一些缓存信息。我该怎么办呢?现在,我要做的是:
id
答案 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错误。