在表单字段上选择选项

时间:2013-02-19 21:55:21

标签: django django-forms django-views

我有一个Django表单,它接受一个CHOICE元组:

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

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

我想做的是,根据命名网址模式提供不同的选择。

所以在我看来,我有这样的事情:

 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'),
         )

如何根据请求动态配置此类选项?

任何帮助都非常感激。

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:0)

您应该修改表单字段小部件的choices属性。