Django模型填充数据时抛出IntegrityError: (1048, "列'xxx'不能为空")
如标题所示,我定义了一个模型,像这样:
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()