2013-02-19 70 views
0

選擇的選擇我有一個Django的形式,這需要一個選擇元組:在表單字段

ANIMAL_TYPE_CHOICE = (
    (1, 'Lion'), 
    (2, 'Tiger'), 
    (3, 'Dolphin'), 
    (4, 'Shark'), 
) 

class AnimalInfoForm(forms.Form): 
    ... 
    animal_type = forms.ChoiceField(
     choices=ANIMAL_TYPE_CHOICE, 
    ) 

我想要做雖然是提供基於名爲url模式的不同選擇的選擇。

所以我認爲我我有這樣的事情:

def AnimalInfo(request, environment=None): 
     ... 

我需要什麼幫助時提供不同的選擇方案取決於environment變量。例如:

def AnimalInfo(request, environment=None): 
     ... 
    if environment == 'marine': 
     # only offer choices 3,4 
     ANIMAL_TYPE_CHOICE = (
      (3, 'Dolphin'), 
      (4, 'Shark'), 
     ) 

如何根據請求動態配置這樣的選擇?

任何幫助非常感謝。

回答

1

可以動態環境變量傳遞給表單修改表單的Init的選擇:

views.py

form = AnimalInfoForm(environment) 

forms.py

ANIMAL_TYPE_CHOICE = (
    (1, 'Lion'), 
    (2, 'Tiger'), 
    (3, 'Dolphin'), 
    (4, 'Shark'), 
) 

ANIMAL_TYPE_CHOICE_AFRICA = (
    (1, 'Lion'), 
    (2, 'Tiger'), 
    (3, 'Elephant'), 
    (4, 'Monkey'), 
) 

class AnimalInfoForm(forms.Form): 
    animal_type = forms.Field() 
    def __init__(self, environment, *args, **kwargs): 
     super(AnimalInfoForm, self).__init__(*args, **kwargs) 
     if environment == "Africa": 
      self.fields['animal_type'] = forms.ChoiceField(choices=ANIMAL_TYPE_CHOICE_AFRICA)) 
     else: 
      self.fields['animal_type'] = forms.ChoiceField(choices=ANIMAL_TYPE_CHOICE)) 
+0

大 - 我會嘗試這個! – 2013-02-19 22:57:23

+0

..它爲你工作? – 2013-02-20 07:04:27

+0

工作出色!謝謝! – 2013-02-20 17:19:59

0

您應該修改表單字段窗口小部件的選項屬性。