2

私は 2 つの CharFields を持っており、ユーザーが両方ではなくどちらか一方を入力する必要があるようにする必要があります (排他的または)。これを行う簡単な方法はありますか?コード:

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()]
)
4

1 に答える 1

7

cleanフォームのメソッドをオーバーライドする必要があります。ここに例があります

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
于 2013-09-22T15:39:42.177 に答える