Home > database >  Django Calling a View from a View doesn't change URL
Django Calling a View from a View doesn't change URL

Time:01-05

I have two views. One which is called gameReportRoster, and the other gameReportStats.

The basic flow of the views is as follows:

gameReportRoster receives a PK from another view. It then renders some forms and processed some data to get a list of the players who played in the game, as well as players who are being added to the roster.

When the user hits submit, some business logic is completed with some data stored to a temporary Model. At this point, we then need to call the gameReportStats to render the next set of forms. When calling gameReportStats, we need to pass to it one variable called game.

The issue I am facing is that when we call gameReportStats, the URL is not changing. So the Post Request is getting handled in gameReportRoster, although we should now be in gameReportStats.

def gameReportRoster(request, pk):

@login_required(login_url="/login/")
def gameReportRoster(request, pk):
    **QUERIES AND FORM RENDERING HERE**

    if request.method == 'POST':
        if 'submitRoster' in request.POST:
            print('submitRoster Was Pressed')

            homePlayedList = request.POST.getlist('homePlayed')
            awayPlayedList = request.POST.getlist('awayPlayed')

            formsetHome = PlayerFormSet(data=request.POST, prefix='home')
            formsetAway = PlayerFormSet(request.POST, prefix='away')

            **OMMITED FORM PROCESSING DONE HERE FOR READABILITY**

            tempGameResult = TempGameResults(game=game)
            tempGameResult.save()

            tempGameResult.homePlayers.set(homePlayersPlayed)
            tempGameResult.awayPlayers.set(awayPlayersPlayed)

            return gameReportStats(request, game)

    **MORE QUERIES AND FORM RENDERING HERE**

    return render(request, "home/game-report-roster.html", context)

def gameReportStats(request, game):

@login_required(login_url="/login/")
def gameReportStats(request, game):
    tempGameResult = TempGameResults.objects.get(game=game)
    # teams = Team.objects.filter(id__in=teamList)
    homeTeam = Team.objects.get(id=game.homeTeam_id)
    awayTeam = Team.objects.get(id=game.awayTeam_id)
    teamList = [homeTeam.id, awayTeam.id]
    teams = Team.objects.filter(id__in=teamList)
    homePlayersPlayed = Player.objects.filter(id__in=tempGameResult.homePlayers.values_list('id'))
    awayPlayersPlayed = Player.objects.filter(id__in=tempGameResult.awayPlayers.values_list('id'))

    gameResultForm = GameResultForm(teams=teams)

    formsetGoalHome = GoalFormSet(
        queryset=Goal.objects.none(),
        form_kwargs={'players': homePlayersPlayed},
        prefix='goalHome'
    )
    formsetGoalAway = GoalFormSet(
        queryset=Goal.objects.none(),
        form_kwargs={'players': awayPlayersPlayed},
        prefix='goalAway'
    )
    formsetPenaltyHome = PenaltyFormSet(
        queryset=Penalty.objects.none(),
        form_kwargs={'players': homePlayersPlayed},
        prefix='penaltyHome'
    )
    formsetPenaltyAway = PenaltyFormSet(
        queryset=Penalty.objects.none(),
        form_kwargs={'players': awayPlayersPlayed},
        prefix='penaltyAway'
    )

    context = {
        'formsetGoalHome': formsetGoalHome,
        'formsetPenaltyHome': formsetPenaltyHome,
        'formsetGoalAway': formsetGoalAway,
        'formsetPenaltyAway': formsetPenaltyAway,
        'gameResultForm': gameResultForm,
        'homeTeam': homeTeam,
        'awayTeam': awayTeam,
    }


    ** THIS IF NEVER GETS CALLED **
    if request.method == 'POST':
        print('Test')
    ** TEMPLATE GETS PROPERLY RENDERED, BUT URL NEVER CHANGES **
    return render(request, "home/game-report-stats.html", context)

urls.py

path('game-report-roster/<str:pk>', views.gameReportRoster, name="gameReportRoster"),
path('game-report-stats/', views.gameReportStats, name="gameReportStats"),

what the actual URL looks like

http://127.0.0.1:8000/game-report-roster/fc4cd6db-d7f9-43b3-aa80-f9d4abfff0e5

CodePudding user response:

Maybe instead of

return gameReportStats(request, game)

try:

return redirect('myappname:your_name_in_urls.py', game)

  •  Tags:  
  • Related