2012-12-16 509 views
0

我是django中的新成员。我需要在我的form.py这样的事情:两个表单域之间的关系

class SearchForm(forms.Form): 
    CHOICES1 = (('a','a'), 
       ('b','b'),) 
    field1 = forms.ChoiceField(choices=CHOICES1) 
#if field1=='a': 
    CHOICES2 = (('c','c'), 
       ('d','d'),) 
    field2 = forms.ChoiceField(choices=CHOICES2) 
#if field1=='b': 
    CHOICES2 = (('e','e'), 
       ('f','f'),) 
    field2 = forms.ChoiceField(choices=CHOICES2) 

但我不知道该怎么做。

+1

你想要什么时候选择'field2'的值?动态地在网页上?这将需要Javascript。在将数据保存到数据库时?那么你应该使用一个模型。对于任何其他情况,您可以使用[表单和字段验证](https://docs.djangoproject.com/en/1.4/ref/forms/validation/) –

+0

是的我想在网页上动态使用它。你能给我一个简单的例子吗? – nim4n

+0

我不得不自己处理这个问题。我通过在每个可选表单字段中设置'required = False'并通过使用JavaScript和jQuery在客户端对相应选项进行验证和显示来解决此问题。见[这里](http://jquery.com/)和[这里](http://bassistance.de/jquery-plugins/jquery-plugin-validation/)。无论如何,你必须使用JavaScript。你无法单独用Python和Django完成你的目标。 – pemistahl

回答

1

有没有简单的方法来做到这一点。您需要在服务器上使用Javascript和自定义验证。

使用jQuery,客户端代码可能是这样的:

var F2_CHOICES = { 
    'a' : { 'c' : 'c', 'd' : 'd'}, 
    'b' : { 'e' : 'e', 'f' : 'f'} 
}; 
var $field2 = $('[name=field2]'); 
    $('[name=field1]').change(
    function() { 
     var currentValue = $(this).val() ; 
     $field2.empty(); 
     for (o in F2_CHOICES[currentValue]){ 
      $field2.append('<option '+' value="'+o+'">'+F2_CHOICES[currentValue][o]+'</option>'); 
     } 
    }); 

在服务器上,您需要将您的形式定义clean的方法来检查,如果FIELD2值对应的选项之一到field1的值。