我正在努力解决以下问题并需要一些指导,下面你会看到我的form.py.我有两个名为group
和single
的字段。我需要对它们应用以下规则/验证......
因此,用户永远不能同时选择一个组并输入一个数字,但它们必须具有一个或另一个。希望有道理吗?
由于这些规则,我不能只添加required = true
并需要某种自定义验证。这是自定义验证我遇到了问题。
根据我需要的那种验证形式,有人能给我一个例子吗?
感谢。
Forms.py
class myForm(forms.ModelForm):
def __init__(self, user=None, *args, **kwargs):
super(BatchForm, self).__init__(*args, **kwargs)
if user is not None:
form_choices = Group.objects.for_user(user).annotate(c=Count('contacts')).filter(c__gt=0)
else:
form_choices = Group.objects.all()
self.fields['group'] = forms.ModelMultipleChoiceField(
queryset=form_choices, required=False
)
self.fields['single'] = forms.CharField(required=False)
答案 0 :(得分:8)
您需要在表单的clean
方法中处理它。
像这样:
class BatchForm(forms.ModelForm):
...
...
def clean(self):
check = [self.cleaned_data['single'], self.cleaned_data['group']]
if any(check) and not all(check):
# possible add some errors
return self.cleaned_data
raise ValidationError('Select any one')
答案 1 :(得分:3)
documentation通过表单的clean()
方法确切地解释了如何验证彼此依赖的表单。