0

私が恐れている別の初心者の問題。このフォームには 3 つのリストがあります。目標は、2 つのリストのクエリセットを変更することです (ビューのコードを参照)。

フォーム.py

class AddGameForm(forms.ModelForm):
    won_lag = forms.ChoiceField(choices=[('1','Home') , ('2', 'Away') ], )
    home_team = forms.ModelChoiceField(queryset=Player.objects.all(),required=True )
    away_team = forms.ModelChoiceField(queryset=Player.objects.all(), required=True )

    class Meta:
        model = Game
        fields = ()

view.py

def game_add(request, match_id):
    # used to create a new Game

    """ return http response page for creating a new Game """

    # Adding a new Game so just make a new one
    game = Game()

    # Get the match specified in the Querystring because we will need it to figure out     who the home team
    # and away team are.
    try:
        match = Match.objects.get(id=match_id)
    except Match.DoesNotExist:
        # we have no object!  do something
        #todo: redirect to list match page?
    pass

    # get form
    form = AddGameForm(request.POST or None, instance=game)

    # Change the Queryset for Home and Away team to show only players that are on the team
    #  AND have not already played in a game so we need to get the "DIFFERENCE" between all
    #  team members and any players that have already played in the match
    home_players = Player.objects.filter(team=match.home_team)            # All Home Team members
    away_players = Player.objects.filter(team=match.away_team)            # All Away Team members
    already_played_in_match_players = Game.objects.filter(match=match)    # This is both home and away players
                                                                      # that have played in a Game on this match

    form.fields['home_team'].queryset = home_players.exclude(pk__in=already_played_in_match_players)
    form.fields['away_team'].queryset = away_players.exclude(pk__in=already_played_in_match_players)
...

私のDBには次のものがあります:

Team 1
   Player 1
   Player 2
Team 2
   Player 3

Match 1
   no games

したがって、フォームを開くと、予想どおり、home_team リストには Player1、Player2 の両方が表示され、away_team リストには Player3 が表示されます

そこで、Player 1 と Player3 を選択して、ゲームを保存します。DBには次のデータがあります

Team 1
   Player 1
   Player 2
Team 2
   Player 3

Match 1
   Game 1 between Player1 and Player3

別のゲームを追加することにしたので、GameAddForm を開き、home_team リストには Player2 のみが表示され、away_team リストにはプレーヤーが表示されないようにします。

ただし、実際には、home_team リストは期待どおりに機能します、away_team リストにはまだ Player 3 が表示されます。

ホームチームでは正しく機能するのに、アウェイチームでは機能しない理由について、私は完全に混乱しています。

助言がありますか?

あなたが提供できるガイダンスを前もって感謝します。

4

1 に答える 1