Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django子模型中的空值_Django_Django Models - Fatal编程技术网

Django子模型中的空值

Django子模型中的空值,django,django-models,Django,Django Models,有人能解释这一简单但具有欺骗性的异常现象吗 有两种模型,其中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 (mos

有人能解释这一简单但具有欺骗性的异常现象吗

有两种模型,其中
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

这是一个Django问题,因为错误与实际问题完全无关


底线-没有任何字段与模型名同名。

我越是考虑这个问题,就越觉得这是一个错误。跟随发展我倾向于同意。我刚刚运行了相同的测试,并且出现了相同的错误(django 1.2)。即使将一个文件设置为抽象文件也不能解决这个问题。除非您试图保存实例,否则验证不应该失败-但这里失败的是关系描述符..哦,设置null=True将解决此特定错误,但是您应该能够构造没有值的对象,并在以后保存它们。您使用的是什么版本的django?哦!这根本不是场上的事。。这都是关于冲突的字段名!我现在就不写我的答案了:只需接受你自己的答案,但我会在评论中提供更多信息。要添加更多信息,要从
a
访问
B
a
会获得一个属性
B
,该属性引用
B
的反向关系实例。由于继承,此“阴影”直接在
b
上定义的
b
属性。django继承模型中禁止字段阴影。。虽然我现在找不到提到这一点的文档。
>>> 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.