首页 文章

Django ModelForm没有检测字段

提问于
浏览
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类中明确指定字段列表可以正常工作 . 但我不明白为什么排除列表适用于一个案例但不适用于另一个案例 .

1 回答

  • 1

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

    exclude = ('field1_group', )
    

相关问题