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