Reputation: 657
I have two CharFields and I need to make it so that the user is required to fill EITHER one of them but not both (exclusive or). Is there an easy way to do this? Code:
def __init__(self, *args, **kwargs):
super(AddMemberByUsernameForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.layout = Layout(
'username',
'student_id',
'title',
'tags',
FormActions(
Submit('save', _('Save changes'))
)
)
username = forms.CharField() #field1
student_id = forms.CharField() #field2 - these are the two fields
title = forms.CharField()
tags = forms.MultipleChoiceField(
required=False,
widget=forms.CheckboxSelectMultiple,
choices=[(x.id, x.name) for x in membership_ops.get_all_membership_tags()]
)
Upvotes: 2
Views: 759
Reputation: 6355
You should override the form's clean
method. Here is an example
def clean(self):
cleaned_data = super(MyForm, self).clean()
username = cleaned_data.get("username")
student_id = cleaned_data.get("student_id")
if username and student_id: # both were entered
raise forms.ValidationError("Enter only one of username or student id")
elif not username and not student_id: # neither were entered
raise forms.ValidationError("You must enter a username or a student id")
return cleaned_data
Upvotes: 6