【发布时间】:2016-02-27 04:48:17
【问题描述】:
我有一个模型:
class Project(Model):
name = models.TextField(...)
... bunch of fields ...
我还有一些模型可以在我的应用程序中跟踪历史记录。这些模型有ForeignKey 对Project 模型的引用:
class Historical_Milestone(Model):
project = models.ForeignKey('Project', db_index=True, related_name='+',
on_delete=models.DO_NOTHING, blank=True, null=True)
当我删除 Project 表中的项目时,我收到以下 IntegrityError:
对表“project”的更新或删除违反了对表“historical_milestone”的外键约束 {...} 详细信息:键 (id)=(123) 仍从表“historical_milestone”中引用。
历史表中的列设置了related_name='+'(表示我不想要反向查找),我设置了on_delete=models.DO_NOTHING参数。根据the documentation on the DO_NOTHING option:
如果您的数据库后端强制执行引用完整性,这将导致 IntegrityError,除非您手动将 SQL ON DELETE 约束添加到数据库字段。
表示我不关心反向关系的related_name 标志不应该处理这个吗?我需要采取哪些手动步骤来修改 Historical_Milestone 表以防止发生此错误?
【问题讨论】: