2013-02-19 3 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

Вы можете динамически изменять выбор в форме инициализации, передавая переменные окружения в виде:

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

Великого - Я буду попробуй это! –

+0

.. это сработает для вас? –

+0

Работал чудесно! Спасибо! –

0

Вы должны изменить атрибут выбора виджета поля формы.

Смежные вопросы