Django 表单中的条件必填字段?

Django 表单中的条件必填字段?,django,Django,我在一页上有两张表格。如果用户在一个表单上选择了某个选项,我想让另一个表单上的选项不再是必需的。我该怎么做?我认为我不能将逻辑放在clean方法中,因为它们是单独的表单。我会使用javascript禁用这些字段。我建议您查找JQuery。我将使用javascript禁用这些字段。我建议您查找JQuery。您可以在视图中执行此操作,只要在调用第二个表单之前将必需的标志设置为False class MyForm1(forms.Form): other_field_required = for

我在一页上有两张表格。如果用户在一个表单上选择了某个选项,我想让另一个表单上的选项不再是必需的。我该怎么做?我认为我不能将逻辑放在
clean
方法中,因为它们是单独的表单。

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

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

您可以在视图中执行此操作,只要在调用第二个表单之前将必需的标志设置为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
作为参数添加到第一个表单的
\uuuu init\uuuu
方法中,然后可以将逻辑放入
clean
方法中

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)
    ...

您可以在视图中执行此操作,只要在调用第二个表单上的is_valid之前将required标志设置为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
作为参数添加到第一个表单的
\uuuu init\uuuu
方法中,然后可以将逻辑放入
clean
方法中

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)
    ...

我非常了解jQuery ty,并且正在广泛使用它,但这对服务器端解决方案没有帮助。JS是可以绕过的。我很清楚jQueryTy,并且我正在广泛使用它,但这对我的服务器端解决方案没有帮助。JS是可以绕过的,鬼鬼祟祟的!我喜欢!你应该看看我想出的黑客工作。。。太可怕了!鬼鬼祟祟的!我喜欢!你应该看看我想出的黑客工作。。。太可怕了!