django - 如何删除基于表单数据本身的表单字段?
django - how to remove form fields based on form data itself?
假定此模型形式:
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')
情况很简单 - 如果 'sex' 是男性,则 field1 应该是必需的,field2 应该是空的。
如果 'sex' 是 Female,则 field2 应该填写,field1 应该在表单中为空。
无论如何,如果没有设置其他字段,我想在服务器中自己设置它。方法 - 模型需要 field1 和 field2。我只希望在表单中只有一个是可编辑的。
我使用 javascript 在表单本身中有条件地显示它们,我如何在服务器中强制执行它?
我试过使用
self.fields.pop('field1')
采用 .clean()
形式,但它不起作用,因为它在字段级别仍然是必需的
在the__init__方法中:
def __init__(self, *args, **kwargs):
if self.is_bound:
sex = self.data.get('sex', None)
if sex == 'M':
self.fields['field1'].required = False
假定此模型形式:
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')
情况很简单 - 如果 'sex' 是男性,则 field1 应该是必需的,field2 应该是空的。 如果 'sex' 是 Female,则 field2 应该填写,field1 应该在表单中为空。 无论如何,如果没有设置其他字段,我想在服务器中自己设置它。方法 - 模型需要 field1 和 field2。我只希望在表单中只有一个是可编辑的。 我使用 javascript 在表单本身中有条件地显示它们,我如何在服务器中强制执行它?
我试过使用
self.fields.pop('field1')
采用 .clean()
形式,但它不起作用,因为它在字段级别仍然是必需的
在the__init__方法中:
def __init__(self, *args, **kwargs):
if self.is_bound:
sex = self.data.get('sex', None)
if sex == 'M':
self.fields['field1'].required = False