我有以下型号:
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类中明确指定字段列表可以正常工作。但我不明白为什么排除列表适用于一个案例但不适用于另一个案例。
答案 0 :(得分:1)
您可以尝试在排除字段列表中添加尾随逗号。让我们知道结果。
exclude = ('field1_group', )