이 단순하면서도기만적인 예외를 설명 할 수 있습니까?Django 하위 모델의 Null 값
# models.py
class A(models.Model):
a = models.IntegerField(blank=True)
class B(A):
b = models.IntegerField(blank=True)
간단한 오른쪽 : B
이 A
의 하위 모델 두 가지 모델이있다
? 그러나 런타임에서 :
>>> 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.
더 많은 것을 생각하면 더 많은 버그가있는 것처럼 보입니다. 개발을 위해 https://code.djangoproject.com/ticket/18480을 따르십시오. –
동의하는 경향이 있습니다. 난 그냥이 같은 테스트를 실행하고 같은 오류가 있습니다 (장고 1.2). A를 추상적으로 설정해도 이것을 분류하지는 않습니다. 유효성 검사는 인스턴스를 저장하지 않는 한 실패하지 않아야합니다.하지만 여기서 실패하는 관계 설명자입니다. –
아, 그리고 null = True로 설정하면이 특정 오류가 해결되지만 값없이 객체를 생성 할 수 있어야합니다 , 나중에 저장하십시오. –