列包含空值
column contains null values
我将 Person 作为外键添加到 CareerHistory table。
person = models.ForeignKey(
Person, on_delete=models.PROTECT, default=None, related_name='careerist')
我设置了 default=None 认为这可以避免 运行 迁移时关于在现有 table 上创建新字段而没有默认值的错误。然而,我却得到了
django.db.utils.IntegrityError: column "person_id" contains null values
现在,那个 table 中只有 114 个人,而且 所有 都有 id,所以我觉得这个错误很混乱。我看了这个答案:
并决定尝试:
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'
)
there are 114 Persons in that table, and all of them have ids, so I find this error very confusing
所以当你添加这个栏目时,数据库不知道哪个职业属于哪个人。所以你必须实现一个数据库迁移来连接这两个。
数据迁移后,可以删除 null=True, default=None
。
我将 Person 作为外键添加到 CareerHistory table。
person = models.ForeignKey(
Person, on_delete=models.PROTECT, default=None, related_name='careerist')
我设置了 default=None 认为这可以避免 运行 迁移时关于在现有 table 上创建新字段而没有默认值的错误。然而,我却得到了
django.db.utils.IntegrityError: column "person_id" contains null values
现在,那个 table 中只有 114 个人,而且 所有 都有 id,所以我觉得这个错误很混乱。我看了这个答案:
并决定尝试:
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'
)
there are 114 Persons in that table, and all of them have ids, so I find this error very confusing
所以当你添加这个栏目时,数据库不知道哪个职业属于哪个人。所以你必须实现一个数据库迁移来连接这两个。
数据迁移后,可以删除 null=True, default=None
。