我有一个表单,我将description
设置为不需要。
class LeaveApprovalForm(forms.ModelForm):
class Meta:
model = LeaveRequest
description = forms.CharField(
widget=forms.Textarea,
label='Reason',
required=False
)
def is_valid(self):
'''A description is not required when approving'''
self.fields['description'].required = False
if self.data.get('reject', None):
self.fields['description'].required = True
return super().is_valid()
但是,在验证表单并显示This field is required.
错误时。 html具有required
属性,因此如果它没有被拒绝并被批准,则触发需要数据输入的jquery弹出窗口。
如何确保formis再次初始化时不需要?
答案 0 :(得分:2)
首先,您不应该覆盖is_valid
。要覆盖的正确方法称为clean()
。
其次,您不应修改字段的所需状态。相反,在clean()
方法中,检查所需的组合并在必要时引发验证错误。
def clean(self):
if self.data.get('reject') and not self.data.get('description'):
raise forms.ValidationError('Description is required if data is supplied')
# or
self.add_error('description', '....')