Первоначальная настройка Django ChoiceField не работает

У меня есть ModelForm, где я использую Django Forms.ChoiceField. Запись значения в базу данных работает. Но когда я открываю URL-адрес, в раскрывающемся списке не отображается ранее выбранное значение в качестве выбранного значения.

Я попытался установить начальное = значение, но это тоже не работает.

class GameForm(forms.ModelForm):
   gameCode = forms.ChoiceField(required=False)

   def __init__(self, *args, **kwargs):
        obj = AllGameCodes.objects.filter(game=game)
        choices = []
        choices.append(('', '-----------'))
        for i in obj:
            choices.append((i.code,i.description))
        self.fields['gameCode'].choices = choices


in views.py,

game = games.objects.get(id=1)
form = GameForm(request.POST, initial={'code':game.code}

person user1159517    schedule 12.05.2015    source источник
comment
Вы делаете это неправильно, вы должны использовать self.fields["<fieldname>"] для доступа к связанным данным формы. Но также есть аналогичный вопрос здесь   -  person FallenAngel    schedule 12.05.2015
comment
что здесь связаны с данными формы?   -  person user1159517    schedule 12.05.2015
comment
Разве вы не вызываете супер init ()?   -  person Rohan    schedule 12.05.2015
comment
Bound - это слово здесь, я думаю, было не так ясно в соответствии с тем, что я хочу сказать, поэтому связанный здесь совершенно неправильный. Связанные и несвязанные данные формы. Я просто понимаю, что ваша порблема совсем другая   -  person FallenAngel    schedule 12.05.2015
comment
super(GameForm, self).__init__(*args, **kwargs)   -  person user1159517    schedule 12.05.2015
comment
да. Я вызываю super в init   -  person user1159517    schedule 12.05.2015
comment
Вы должны взять переменную game из kwargs, es.objects.filter(game=game) неверно. Используйте game=kwargs["game"]   -  person FallenAngel    schedule 12.05.2015


Ответы (2)


Вы должны взять переменную game из kwargs. Также использование ModelChoicefield может упростить ваше решение.

def __init__(self, *args, **kwargs):
    super(GameForm, self).__init__(*args, **kwargs)
    _game = kwargs.get("game"):
    if _game:
        self.fields['gameCode'] = ModelChoiceField(queryset=AllGameCodes.objects.filter(game=_game), required=False)
person FallenAngel    schedule 12.05.2015

Для дальнейшего использования вы можете использовать form = GameForm(instance=game) для загрузки формы с данными модели и записи новых данных в эту модель. Кроме того, вместо перезаписи класса формы вы можете изменять поля в своем представлении.

#views.py

game = games.objects.get(id=1)
form = GameForm(request.POST, instance=game)
form.fields['gameCode'].queryset = AllGameCodes.objects.filter(game=game)
person OofYeetMcGee    schedule 24.08.2019