2010-10-07 104 views
0

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

回答

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方法。

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

偷偷摸摸!我喜欢!你应该看到我提出的黑客工作......这太可怕了! – mpen 2010-10-08 02:05:04

0

我会禁用使用JavaScript的字段。我会建议查找JQuery。

+0

我很了解jQuery ty,并且我正在广泛使用它,但这对服务器端解决方案没有帮助。 JS是可以绕过的。 – mpen 2010-10-07 19:07:50