2013-09-22 66 views
0

我有两个CharFields,我需要这样做,以便用户被要求填写其中一个但不是两个(独占或)。是否有捷径可寻?代码:Django窗体:创建两个字段需要XOR?

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()] 
) 
+0

这不是脆皮形式可以帮助的东西 - 它取决于底层的Django表单库。 –

回答

5

您应该覆盖表格的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 
相关问题