0

我有以下型号:

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 不可见(意外行为)。

如果我注释掉 exclude=('field3_test') 则 field3 在模板中可见(预期行为)但表单验证失败,因为 field3_test 为 None 并且是必填字段。

我错过了什么?这似乎是我无法弄清楚的代码的问题。这种行为显然不一致,我无法看到我的代码中的差异。

任何想法如何调试这个?可能是什么问题呢?

我尝试从基本表单类中删除 abstract=True ,但没​​有帮助。

但是,在 ConcreteModelForm 类中显式指定字段列表是可行的。但我不明白为什么排除列表适用于一种情况而不适用于另一种情况。

4

1 回答 1

1

您能否尝试在排除字段列表中添加尾随逗号。让我们知道结果。

exclude = ('field1_group', )
于 2012-11-14T06:50:27.997 回答