Django ChoiceField初始设置无法正常工作

时间:2015-05-12 06:32:30

标签: django django-forms choicefield

我有ModelForm,我使用Django Forms.ChoiceField。将值写入数据库可以正常工作。但是当我打开网址时,下拉列表不会将之前选择的值显示为选定值。

我尝试设置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}

2 个答案:

答案 0 :(得分:1)

您必须从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)

答案 1 :(得分: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)