2012-11-14 2 views
0

를 감지하지 I가 다음 모델 : 위의장고 ModelForm 필드

class Model1(models.Model): 
    field1 = ... 
    field2 = ... 
    class Meta: 
      abstract = True 

class Model2(models.Model): 
    field3 = ... 
    field4 = ... 
    class Meta: 
      abstract = True 

내가 가진 콘크리트 구현 :

class ConcreteModel1(Model1): 
    field1_group = ... # foreign key to ConcreteModel3 


class ConcreteModel2(Model2): 
    field3_test = ... # foreign key to ConcreteModel4 

내가 가진 추상적 인 ModelForms : 내가 가지고있는

class Model1Form(ModelForm): 
     class Meta: 
      widgets = { ... } 
      abstract = True 

class Model2Form(ModelForm): 
     class Meta: 
      widgets = { ... } 
      abstract = True 

concrete ModelForms :

class ConcreteModel1Form(Model1Form): 
     class Meta(Model1Form.Meta): 
      model = ConcreteModel1 
      exclude = ('field1_group') 


class ConcreteModel2Form(Model2Form): 
     class Meta(Model2Form.Meta): 
      model = ConcreteModel2 
      exclude = ('field3_test') 

이제 알 수 있듯이 두 모델 양식간에 유사점이 있습니다. 문제는 템플릿 내에서 Field1이 ConcreteModel1Form (예상되는 동작)에 대해 표시된다는 것입니다. 그러나 다른 템플릿에서는 field3이 ConcreteModel2Form에 대해 표시되지 않습니다 (예기치 않은 동작).

exclude = ('field3_test')를 주석 처리하면 field3_template이 (예상 된 동작) 템플릿에 표시되지만 field3_test는 None이고 필수 필드이므로 양식 유효성 검사가 실패합니다.

무엇이 누락 되었습니까? 이것은 내가 알 수없는 코드에 문제가있는 것 같습니다. 이 동작은 분명히 모순되며 내 코드에서 차이점을 볼 수 없습니다.

아이디어를 디버깅하는 방법은 무엇입니까? 무엇이 문제 일 수 있습니까?

기본 폼 클래스에서 abstract = True를 제거하려고 시도했지만 도움이되지 않습니다.

명시 적으로 ConcreteModelForm 클래스의 필드 목록을 지정하면 작동합니다. 그러나 제외 목록이 한 가지 경우에만 작동하지만 다른 하나의 경우에는 작동하지 않는 이유는 알 수 없습니다.

답변

1

제외 필드 목록에 후행 쉼표를 추가 할 수 있습니까? 결과를 알려주십시오.

exclude = ('field1_group',) 
+0

멋진 제안입니다. 그것은 작동합니다. 그러나 왜 ','가 필요한가? 그것은 장고에있는 버그인가? –

+0

내 대답은 여기에서 찾을 수 있습니다 : http://stackoverflow.com/questions/6082195/how-to-remove-extra-in-tuple-in-djangopython 너무 많은 컨벤션에 대한. –