表单中的条件必填字段?
问题描述:
我在一个页面上有两个表单。如果用户在一个表单上选择了某个选项,我想在另一个表单上选择不再需要的选项。我怎样才能做到这一点?我不认为我可以将逻辑放在clean
方法中,因为它们是单独的表单。表单中的条件必填字段?
答
只要在第二个窗体上调用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
方法。
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)
...
答
我会禁用使用JavaScript的字段。我会建议查找JQuery。
+0
我很了解jQuery ty,并且我正在广泛使用它,但这对服务器端解决方案没有帮助。 JS是可以绕过的。 – mpen 2010-10-07 19:07:50
偷偷摸摸!我喜欢!你应该看到我提出的黑客工作......这太可怕了! – mpen 2010-10-08 02:05:04