diff --git a/tournaments/models/tournament.py b/tournaments/models/tournament.py index d8ac5a2..d9dfcdf 100644 --- a/tournaments/models/tournament.py +++ b/tournaments/models/tournament.py @@ -75,7 +75,6 @@ class Tournament(models.Model): minimum_player_per_team = models.IntegerField(default=2) maximum_player_per_team = models.IntegerField(default=2) information = models.CharField(max_length=4000, null=True, blank=True) - _being_deleted = False # Class attribute def __str__(self): if self.name: @@ -1186,12 +1185,6 @@ class Tournament(models.Model): return waiting_teams[0].team_registration return None - - def delete(self, *args, **kwargs): - # Mark this tournament as being deleted - self._being_deleted = True - super().delete(*args, **kwargs) - def broadcasted_prog(self): # Get matches from broadcasted_matches_and_group_stages matches, _ = self.broadcasted_matches_and_group_stages() diff --git a/tournaments/signals.py b/tournaments/signals.py index 1de9963..ac9e8e2 100644 --- a/tournaments/signals.py +++ b/tournaments/signals.py @@ -1,6 +1,6 @@ import random import string -from django.db.models.signals import post_save, pre_delete +from django.db.models.signals import post_save, pre_delete, post_delete from django.dispatch import receiver from django.conf import settings from tournaments.models.tournament import Tournament @@ -12,6 +12,8 @@ import requests from tournaments.services.email_service import TournamentEmailService from tournaments.models import PlayerDataSource +tournament_deletion_in_progress = set() + def generate_unique_code(): characters = string.ascii_lowercase + string.digits while True: @@ -59,13 +61,13 @@ def send_discord_message(webhook_url, content): f'Error sending message to Discord webhook: {response.status_code}, {response.text}' ) -@receiver(pre_delete, sender=TeamRegistration) +@receiver(post_delete, sender=TeamRegistration) def unregister_team(sender, instance, **kwargs): team_registration = instance tournament = instance.tournament - - # Skip creating unregistration records if tournament is being deleted - if not tournament or tournament._being_deleted == True: + global tournament_deletion_in_progress + print('pre_delete TeamRegistration', tournament_deletion_in_progress) + if tournament.id in tournament_deletion_in_progress: return first_waiting_list_team = tournament.first_waiting_list_team() @@ -117,10 +119,18 @@ def unregister_team(sender, instance, **kwargs): other_player ) +@receiver(post_delete, sender=Tournament) +def tournament_deletion(sender, instance, **kwargs): + global tournament_deletion_in_progress + tournament_deletion_in_progress.discard(instance.id) + print('post tournament_deletion_in_progress', tournament_deletion_in_progress) + @receiver(pre_delete, sender=Tournament) def notify_players_of_tournament_cancellation(sender, instance, **kwargs): tournament = instance - + global tournament_deletion_in_progress + tournament_deletion_in_progress.add(instance.id) + print('pre tournament_deletion_in_progress', tournament_deletion_in_progress) # Get all team registrations team_registrations = tournament.teamregistration_set.all()