2012-12-16 374 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的值。