我有一个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'),
)
如何根据请求动态配置此类选项?
任何帮助都非常感激。
答案 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属性。