我有两个型号
class A(models.Model):
title = models.CharField()
class B(models.Model):
heading = models.ForeignKey(A)
content = models.CharField()
当我尝试执行以下操作时,我得到了IntegrityError: b.heading may not be null
b = B()
a = A()
b.heading = a
b.heading.title = 'title'
b.content = 'content'
b.heading.save()
b.save()
为什么会这样?我们不能用这种方式处理对象吗?
答案 0 :(得分:3)
这实际上与你做事的顺序有关。
首次将a
分配给b.heading
时,A
对象尚未保存,并且没有主键。因此,在分配时,b.heading_id
将保持None
。 b.heading
对b
一无所知,因此保存后,b.heading_id
将保持None
。保存b
时,它希望b.heading_id
具有有效的非空值,显然它没有。因此,引发了IntegrityError
。
您应该做的是保存a
后执行作业:
b = B()
a = A()
a.title = 'title'
a.save()
b.heading = a
b.content = 'content'
b.save()