except models.Player.DoesNotExist: raise Http404 initial = { 'home_team': game.home_roster.team_id, 'away_team': game.away_roster.team_id, } if request.method == 'POST': game_form = forms.GameForm(request.POST, instance=game, initial=initial) home_statistic_formset = forms.GameStatisticModelFormSet(request.POST, prefix='home', instance=game.home_roster) away_statistic_formset = forms.GameStatisticModelFormSet(request.POST, prefix='away', instance=game.away_roster) if game_form.is_valid() and home_statistic_formset.is_valid() and away_statistic_formset.is_valid(): game = game_form.save() # if home_team or away_team were changed, clear the statistics if 'home_team' in game_form.changed_data: game.home_roster.team = game_form.cleaned_data['home_team'] game.home_roster.save() game.home_roster.player_statistics.all().delete() else: home_statistic_formset.save() if 'away_team' in game_form.changed_data: game.away_roster.team = game_form.cleaned_data['away_team'] game.away_roster.save() game.away_roster.player_statistics.all().delete() else: away_statistic_formset.save() if 'home_team' in game_form.changed_data or 'away_team' in game_form.changed_data: return redirect('game_edit', game_id=game.id) messages.success(request, 'Game {0} updated'.format(game)) return redirect('game_view', game_id=game.id) else: game_form = forms.GameForm(instance=game, initial=initial) home_statistic_formset = forms.GameStatisticModelFormSet(prefix='home', instance=game.home_roster) away_statistic_formset = forms.GameStatisticModelFormSet(prefix='away', instance=game.away_roster) return TemplateResponse(request, 'softball/game/edit.html', { 'game': game, 'game_form': game_form, 'home_statistic_formset': home_statistic_formset, 'away_statistic_formset': away_statistic_formset, })