django - 如何在Django中使用ForeignKey初始化一个空对象?

标签 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

我不知道如何初始化一个空的但不是“None”的A。

我需要你的帮助,

谢谢你

最佳答案

我认为你很困惑ManyToManyFieldForeignKey

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

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

其中objectb是类B的实例

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

i.b 正在访问模型实例 i 的属性 b,该属性为 None,并且当ORM 尝试调用 b 上的 add,它确实是 None。因此出现了错误。

关于django - 如何在Django中使用ForeignKey初始化一个空对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20569910/

相关文章:

python - 有没有用 Django 制作的 sql 管理面板? - Django

django - 如何根据相关字段过滤django中的对象?

Django,post_delete,使用反向关系安全吗?

python - 如何重置openx静态文件缓存?

django - 精确查找的 QuerySet 值必须使用切片限制为一个结果

Django 多对多显示值,而不是对象

c++ - 为什么 main() 中的调用 `A a(c);` 没有歧义?

python - 获取文章->产品关系的最低价目表

c++ - 初始化器列表 *argument* 评估顺序

c++ - 有没有可能的方法来强制使用字符串文字进行隐式构造函数初始化