有人可以解释这个简单而又欺骗性的异常吗?
有两种型号,其中B
是A
的子模型:
# models.py
class A(models.Model):
a = models.IntegerField(blank=True)
class B(A):
b = models.IntegerField(blank=True)
简单,对吧?但是在运行时:
>>> A()
<A: A object>
>>> B()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "django/db/models/base.py", line 357, in __init__
setattr(self, field.attname, val)
File "django/db/models/fields/related.py", line 271, in __set__
(instance._meta.object_name, self.related.get_accessor_name()))
ValueError: Cannot assign None: "B.b" does not allow null values.
这里发生了什么?为什么A.a
表现良好而B.b
对自己空白感到不满意?
编辑:我注意到设置blank=True
对所述行为没有任何影响,但仍然无法解释此问题。
现在这个:(?!?!?!)
>>> a = A(a=5)
>>> b = B(b=6)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "django/db/models/base.py", line 357, in __init__
setattr(self, field.attname, val)
File "django/db/models/fields/related.py", line 275, in __set__
self.related.get_accessor_name(), self.related.opts.object_name))
ValueError: Cannot assign "6": "B.b" must be a "B" instance.
答案 0 :(得分:2)
好的,我设法解决了这个烂摊子。
这里的问题是模型和字段具有相同的名称(与案例无关)。我在我的问题模型以及此处的示例(A.a
和B.b
)中都有这个。
这是一个Django问题,因为错误与真正的问题无关。
底线 - 没有任何与型号名称相同的字段。