0

我有一个带有 CHOICE 元组的 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'),
         )

如何根据请求动态配置这样的选择?

非常感谢任何帮助。

4

2 回答 2

1

您可以通过将环境变量传递给表单来动态修改表单 init 中的选项:

视图.py

form = AnimalInfoForm(environment)

表格.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))
于 2013-02-19T22:03:46.247 回答
0

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

于 2013-02-19T21:59:11.213 回答