列包含空值



我将Person添加为CareerHistory表的外键。

person = models.ForeignKey(
Person, on_delete=models.PROTECT, default=None, related_name='careerist')

我设置default=None,认为这样可以避免在迁移时在没有默认值的现有表上创建新字段的错误。然而,我得到的却是

django.db.utils.IntegrityError: column "person_id" contains null values

现在,该表中只有114个人,并且所有都有id,所以我发现这个错误非常令人困惑。我看着这个答案:SQL Django Null约束错误-无法解决?

并决定尝试:

person = models.ForeignKey(
Person, on_delete=models.PROTECT, default='', related_name='careerist')
然而,这个仍然返回相同的错误。然后我去了:
person = models.ForeignKey(
Person, on_delete=models.PROTECT, default='', null=True, related_name='careerist')

但是我仍然得到相同的错误。我不明白这是怎么回事。有人能解释一下,告诉我如何解决这个问题吗?我不想只是修复它,我想了解这里发生了什么。也许我需要编辑我的迁移文件?谢谢。

问题是您添加字段,但不允许null。通过添加null=True,您应该可以解决迁移过程中的问题。

person = models.ForeignKey(
Person, 
on_delete=models.PROTECT, 
null=True,
default=None, 
related_name='careerist'
)

该表中有114个人,并且他们都有id,所以我发现这个错误非常令人困惑

所以当你添加这一列时,数据库不知道哪个职业属于哪个人。因此,您必须实现数据库迁移来连接这两者。

数据迁移后,可以移除null=True, default=None

最新更新