表格中有条件的必填字段?

时间:2010-10-07 18:38:26

标签: django

我在一个页面上有两个表单。如果用户在一个表单上选择某个选项,我想在不再需要的另一个表单上创建一个选项。我怎样才能做到这一点?我不认为我可以将逻辑放在clean方法中,因为它们是单独的形式。

2 个答案:

答案 0 :(得分:3)

您可以在视图中执行此操作,只要在第二个表单上调用is_valid之前将必需标志设置为False即可。

class MyForm1(forms.Form):
    other_field_required = forms.BooleanField(required=False)

class MyForm2(forms.Form):
    sometimes_required = forms.CharField(required=True)

def myview(request):
    form1 = MyForm1(request.POST)
    form2 = MyForm2(request.POST)

    if form1.is_valid():
        if not form1.cleaned_data['other_field_required']:
            form2.fields['sometimes_required'].required = False

    ...
        if form2.is_valid(): # form2 will be valid if other_field_required was False

或者,您可以将myform2作为参数添加到第一个表单的__init__方法中,然后可以将逻辑放在clean方法中。< / p>

class MyForm1(forms.Form):
    other_field_required = forms.BooleanField(required=False)

    def __init__(myform2, *args, **kwargs):
        super(MyForm1, self).__init__(*args, **kwargs)
        self.form2 = form2

    def clean(self):
        if not self.cleaned_data['other_field_required']:
            self.form2.fields['other_field_required'].required = False
...

def myview(request):
    form2 = MyForm2(request.POST)
    form1 = MyForm1(form2, data=request.POST)
    ...

答案 1 :(得分:0)

我会使用javascript禁用这些字段。我建议查找JQuery。