Django:在保存之前将模型对象指定为ForeignKey

时间:2014-05-03 13:13:25

标签: django django-models

我有两个型号

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()

为什么会这样?我们不能用这种方式处理对象吗?

1 个答案:

答案 0 :(得分:3)

这实际上与你做事的顺序有关。

首次将a分配给b.heading时,A对象尚未保存,并且没有主键。因此,在分配时,b.heading_id将保持Noneb.headingb一无所知,因此保存后,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()