Django - выберите значение выбора в зависимости от загруженного представления - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть класс (forms.form), где у меня есть выбор. Я sh решу, всякий раз, когда я загружаю view_1, что выбор для этого представления - choice_A, а затем, когда я загружаю view_2, выбор для этого представления - choice_B. Поэтому в зависимости от загруженного представления значение выбора изменяется соответственно.

Класс для CreateGameForm (forms.form)

class CreateGame(forms.Form):
    game_choices = ([
            ('choice_A', 'choice_A'),
            ('choice_B', 'choice_B')
             ])            

    game = forms.ChoiceField(choices=game_choices , required=True)

Я пытался заставить его работать с изменением начальное значение, добавив его в игру, а затем в def init добавив его вместе с функцией, которая изменяет начальное значение при изменении view / URL_pattern, но без особой удачи.

Есть идеи?

Использование исходной методологии

class CreateGame(forms.Form):
    game_choices = ([
            ('choice_A', 'choice_A'),
            ('choice_B', 'choice_B')
             ])            

    game = forms.ChoiceField(choices=game_choices , required=True, initial="choice_A")

Мой createView

class CreateGameA(CreateView):
    template_name = 'otree/gameA.html'
    url_pattern = r"^create_game/gameA/"

    def get_initial(self):
        initial = super().get_initial()
        initial['game'] = 'gameA'
        return initial

Редактировать

Убедитесь, что у вас есть FormMixin или используйте CreateView, иначе вы не можете использовать get_initial.

1 Ответ

0 голосов
/ 06 апреля 2020

Предполагая, что вы используете CreateView для своих представлений, вы можете переопределить get_initial () в каждом представлении.

class GameAView(CreateView):
     ...

    def get_initial(self):
        initial = super().get_initial()
        initial['game'] = 'choice_A'
        return initial


class GameBView(CreateView):
     ...

    def get_initial(self):
        initial = super().get_initial()
        initial['game'] = 'choice_B'
        return initial
...