我有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}
答案 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)