django - 如何根据表单数据本身删除表单字段?

时间:2016-07-24 13:25:16

标签: django forms validation dynamic field

假设此模型形式:

class MyModel(models.Model):
   sex = models.CharField(max_length=1, default='M')
   field1 = models.CharField(max_length=20)
   field2 = models.CharField(max_length=20

class MyForm(ModelForm):
   class Meta:
      model = MyModel
      fields = ('sex', 'field1', 'field2')

案例很简单 - 如果'性别'是男性,field1应该是必需的,field2应该是空的。 如果'性别'是女性,应填写field2,并且表格中的field1应为空。 在任何情况下,如果未设置其他字段,我想在服务器中自己设置它。均值 - 模型需要field1和field2。我只想在表单中只能编辑一个。 我使用javascript在表单中有条件地显示它们,如何在服务器中强制执行?

我尝试过使用

self.fields.pop('field1')

格式.clean()但不起作用,因为字段级别仍然需要

1 个答案:

答案 0 :(得分:0)

在_init__方法中:

    def __init__(self, *args, **kwargs):
        if self.is_bound:
            sex = self.data.get('sex', None)
            if sex == 'M':
               self.fields['field1'].required = False