Django模型填充数据时抛出IntegrityError: (1048, "列'xxx'不能为空")

1 投票
2 回答
551 浏览
提问于 2025-04-18 14:33

如标题所示,我定义了一个模型,像这样:

class Test(models.Model):
    owner = models.ForeignKey(Member)
    name = models.CharField(max_length=6
    score = models.IntegerField(validators=[MinValueValidator(1), MaxValueValidator(10)])
    service  = models.ForeignKey(Service)
    feel = models.ForeignKey(feel)
    ....

如果我执行

t, created = Test.objects.get_or_create(owner=member)

会出现IntegrityError: (1048, "Column 'xxx' cannot be null")的错误。

但我只是想稍后再填充数据。给模型字段加上null=True是不好的,因为这个字段实际上是必须有值的。我该如何实现我的目标呢?

2 个回答

-1

如果你在使用 get_or_create 的时候用到了外键(ForeignKey),你需要明确是否允许这个外键为空。如果不允许的话,当你尝试保存的时候就会出现错误。

我知道你说过不想使用 NULL(空值),但是在使用 get_or_create 的时候这是必须的。

为了使用 get_or_create 方法,你需要设置以下内容。

feel = models.ForeignKey(feel, null=True, blank=True, unique=False/True )

我建议你不要使用 get_or_create,而是选择常规的方式来创建对象。

例如:)

object = ModelObject( data = "blah", data2 = "blah" ) 
object.save(commit=False)

# do your other processing
object.other_data = "value"
object.save()

祝你一切顺利,编码愉快。

Jody Fitzpatrick

3

你需要先在内存中创建一个对象,并把数据填好,然后再尝试把它保存到数据库里。对数据库来说,在所有数据都填好之前,这一行数据是无效的。

所以:

t = Test(owner=member) # Does not go to the database

#
# some other non-related code
# 

# The you update your Test object with all of the fields and save
t.name = 34
t.score = 4
t.service = service # added separately
t.feel = feel # added separately 
t.save()

撰写回答