1

我有使用 Django Forms.ChoiceField 的 ModelForm。将值写入数据库有效。但是当我打开 url 时,下拉列表没有将先前选择的值显示为选定值。

我尝试设置 initial=value,但效果不佳。

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}
4

2 回答 2

1

您必须gamekwargs. 也使用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)
于 2015-05-12T07:05:10.177 回答
0

为了将来参考,您可以使用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)
于 2019-08-24T22:01:21.433 回答