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 パターンに基づいて別の選択肢を提供することです。

したがって、私の見解では、II には次のようなものがあります。

 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の選択肢を動的に変更できます。

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))
于 2013-02-19T22:03:46.247 に答える
0

フォームフィールドウィジェットのchoices属性を変更する必要があります。

于 2013-02-19T21:59:11.213 に答える