diff --git a/drakul/raids/signals.py b/drakul/raids/signals.py index 1481f44..b791b03 100644 --- a/drakul/raids/signals.py +++ b/drakul/raids/signals.py @@ -28,8 +28,12 @@ def create_raid_no_responses(instance: Raid, **kwargs): @receiver(post_save, sender=User) -def create_user_no_responses(instance: User, **kwargs): - # Delete all pre-existing no-responses for this user, in case date_joined or main as changed +def create_user_no_responses(instance: User, created: bool, **kwargs): + if (instance.original_main_id, instance.original_date_joined) == (instance.main_id, instance.date_joined) \ + and not created: + return + + # Delete all pre-existing no-responses for this user, in case date_joined or main was changed RaidResponse.objects.filter(character__user=instance, status=RaidResponse.NO_RESPONSE).delete() # Then create them (again) RaidResponse.objects.bulk_create( diff --git a/drakul/users/models.py b/drakul/users/models.py index b1985aa..5081b69 100644 --- a/drakul/users/models.py +++ b/drakul/users/models.py @@ -48,6 +48,14 @@ class User(AbstractUser): class Meta: ordering = ["rank", "username"] + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._set_originals() + + def _set_originals(self): + self.original_main_id = self.main_id + self.original_date_joined = self.date_joined + def clean(self): self.username = self.normalize_username(self.username) if not hasattr(self, "rank"): @@ -75,6 +83,8 @@ class User(AbstractUser): user = super().save(*args, **kwargs) self.main.user = self self.main.save() + + self._set_originals() return user