2012-06-17 2 views
1

이 단순하면서도기만적인 예외를 설명 할 수 있습니까?Django 하위 모델의 Null 값

# models.py 
class A(models.Model): 
    a = models.IntegerField(blank=True) 

class B(A): 
    b = models.IntegerField(blank=True) 

간단한 오른쪽 : BA의 하위 모델 두 가지 모델이있다

? 그러나 런타임에서 :

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

더 많은 것을 생각하면 더 많은 버그가있는 것처럼 보입니다. 개발을 위해 https://code.djangoproject.com/ticket/18480을 따르십시오. –

+0

동의하는 경향이 있습니다. 난 그냥이 같은 테스트를 실행하고 같은 오류가 있습니다 (장고 1.2). A를 추상적으로 설정해도 이것을 분류하지는 않습니다. 유효성 검사는 인스턴스를 저장하지 않는 한 실패하지 않아야합니다.하지만 여기서 실패하는 관계 설명자입니다. –

+0

아, 그리고 null = True로 설정하면이 특정 오류가 해결되지만 값없이 객체를 생성 할 수 있어야합니다 , 나중에 저장하십시오. –

답변

2

OK,이 혼란을 해결하기 위해 관리.

여기서 문제는 모델과 필드가 같은 이름 (사례에 구애받지 않음)을 갖고 있다는 것입니다. 나는이 문제 모델뿐만 아니라 여기에있는 예제 (A.aB.b)를 가지고있다.

이것은 실제 문제와 관련이없는 장고 문제입니다.

하단 - 모델 이름과 동일한 필드가 없습니다.

+0

지금 내 대답을 쓰지 않겠습니다. P –

+0

너무 좋지 않습니다. 당신이 그것을 쓰면, 그것은 10 + 15 포인트 가치가있을거야;) –

+0

그냥 자신의 대답 친구를 수락하지만, 내가 코멘트에 더 많은 정보를 제공 할게. –