2012-11-14 49 views
0

我有以下型號:的Django的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 

我有混凝土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(意外的行爲)。

如果我註釋掉排除=(「field3_test」),那麼場3是在模板(預期的行爲)可見,但因爲field3_test是無,是一個必填字段表單驗證失敗。

我錯過了什麼?這似乎是我的代碼的問題,我無法弄清楚。這種行爲顯然不一致,我無法看到我的代碼中的差異。

任何想法如何調試?可能是什麼問題呢?

我試圖從基本窗體類中刪除abstract = True,並沒有幫助。

但是,在ConcreteModelForm類中顯式指定字段列表仍然有效。但我不明白爲什麼排除列表適用於一個案例,而不是另一個。

回答

1

您可以嘗試在排除字段列表中添加尾隨逗號。讓我們知道結果。

exclude = ('field1_group',) 
+0

這是一個明智的建議。有用。但爲什麼需要','。這是在Django中的錯誤? –

+0

我在這裏找到我的答案: http://stackoverflow.com/questions/6082195/how-to-remove-extra-in-tuple-in-djangopython 非常適合約定配置。 –