この同じトピックについて多くの質問があることは知っていますが、1 つの点で混乱しています。私の意図は、フォームに 2 つの ModelChoiceFields を表示することですが、それらを Game モデルに直接結び付けることはしません。
私は次のものを持っています:
フォーム.py
class AddGame(forms.ModelForm):
won_lag = forms.ChoiceField(choices=[('1','Home') , ('2', 'Away') ])
home_team = forms.ModelChoiceField(queryset=Player.objects.all())
away_team = forms.ModelChoiceField(queryset=Player.objects.all())
class Meta:
model = Game
fields = ('match', 'match_sequence')
Views.py
def game_add(request, match_id):
game = Game()
try:
match = Match.objects.get(id=match_id)
except Match.DoesNotExist:
# we have no object! do something
pass
game.match = match
# get form
form = AddGame(request.POST or None, instance=game)
form.fields['home_team'].queryset = Player.objects.filter(team=match.home_team )
# handle post-back (new or existing; on success nav to game list)
if request.method == 'POST':
if form.is_valid():
form.save()
# redirect to list of games for the specified match
return HttpResponseRedirect(reverse('nine.views.list_games'))
...
私が混乱しているのは、クエリセットフィルターを設定するときです。最初に試しました:
form.home_team.queryset = Player.objects.filter(team=match.home_team )
しかし、私はこのエラーが発生しました
AttributeError at /nine/games/new/1
'AddGame' object has no attribute 'home_team'
...
だから私はそれを次のように変更しました:(他の投稿を読んだ後)
form.fields['home_team'].queryset = Player.objects.filter(team=match.home_team )
今では正常に動作します。
私の質問は、2 つの行の違いは何ですか? 最初のものではなく、2番目のものはなぜ機能したのですか? 私はそれが初心者(私は1人です)の質問だと確信していますが、私は困惑しています。
どんな助けでも大歓迎です。