from django.db.models.signals import post_save from django.dispatch import receiver from .models import GameHistory, Stats @receiver(post_save, sender=GameHistory) def update_player_stats(sender, instance, created, **kwargs): if created: # get players player_1_stats, _ = Stats.objects.get_or_create(player_id=instance.player_1_id) player_2_stats, _ = Stats.objects.get_or_create(player_id=instance.player_2_id) # update wins and losses if instance.winner_id == instance.player_1_id: player_1_stats.wins += 1 player_2_stats.losses += 1 else: player_1_stats.losses += 1 player_2_stats.wins += 1 # update games played player_1_stats.total_games_played += 1 player_2_stats.total_games_played += 1 # update win rate player_1_stats.win_rate = player_1_stats.wins / player_1_stats.total_games_played * 100 player_2_stats.win_rate = player_2_stats.wins / player_2_stats.total_games_played * 100 # update hours played player_1_stats.total_hours_played += instance.duration / 3600 player_2_stats.total_hours_played += instance.duration / 3600 # update goal scored player_1_stats.goal_scored += instance.player_1_score player_2_stats.goal_scored += instance.player_2_score # update goal conceded player_1_stats.goal_conceded += instance.player_2_score player_2_stats.goal_conceded += instance.player_1_score # save stats player_1_stats.save() player_2_stats.save()