如何在Django中使用Foreign Key初始化空对象?

时间:2013-12-13 15:19:31

标签: django django-models initialization attributeerror nonetype

我的models.py看起来像这样:

class B(models.Model):
    ...

class C(models.Model):
    ...

class D(models.Model):
    ...

class A(models.Model):
    b = models.ForeignKey(B, blank=True, null=True)
    c = models.ForeignKey(C, blank=True,null=True)
    d = models.ForeignKey(D, blank=True,null=True)

在views.py中,我必须初始化一个空A,然后再填充它。我可以用

i = A().save()

但是当我尝试这样的事情时:

i.b.add(objectb)

发生此异常:

'NoneType' object has no attribute 'b'

我试图取消null = True:

class A(models.Model):
    b = models.ForeignKey(B, blank=True)
    c = models.ForeignKey(C, blank=True)
    d = models.ForeignKey(D, blank=True)

但是又出现了另一个例外:

A.b_id may not be NULL

我无法弄清楚如何初始化空而不是“无”A。

我需要你的帮助,

谢谢你

2 个答案:

答案 0 :(得分:2)

我认为您混淆了ManyToManyFieldForeignKey

要初始化外键,您只需执行以下操作:

i = A().save()
i.b = objectb
i.save()

其中objectb是类B的实例

i.b.add(objectb)抛出异常的原因是,

i.b正在访问模型实例b的属性i,即None,当ORM尝试在add上调用b时{1}},确实是None。因此错误。

答案 1 :(得分:1)

试试这个:

a = A()
b = B()
b.save()
a.b = b
a.save()