Как использовать post_save и pre_save с одним отправителем с помощью сигналов django

могу ли я использовать post_save и pre_save с одним отправителем в сигналах Django? Я делаю это потому, что в моем модуле есть 2 случая, и оба требуют разных подходов. Вот мой код :

models.py

class Team(models.Model):
    name = models.ForeignKey(TeamName,on_delete=models.PROTECT,related_name="team_team_name")
    home_strip = models.ForeignKey(TeamStrip,on_delete=models.PROTECT,related_name="team_team_home_strip")
    away_strip = models.ForeignKey(TeamStrip,on_delete=models.PROTECT,related_name="team_team_away_strip")
    logo = models.ForeignKey(TeamLogo, on_delete=models.PROTECT,related_name="team_team_logo")
    region = models.ForeignKey("locations.Region",on_delete=models.PROTECT,related_name="region_teams")
    cap = models.ForeignKey("players.PlayerProfile",on_delete=models.PROTECT,related_name="team_team_cap")
    players = models.ManyToManyField("players.PlayerProfile",null=True,blank=True)
    average_skill = models.PositiveIntegerField(default=0)

    def __str__(self) -> str:
        return str(self.name.name) + " - " + str(self.region.name_ar) + "," + str(self.region.name_en)

signals.py

@receiver(pre_save, sender=Team)
def create_Team(sender, instance, **kwargs):
    if instance.players.all().count() == 0:
        print('normal save')
        cap_skills = instance.cap.average_skill
        instance.cap.is_cap = True
        instance.cap.save()
        instance.average_skill = cap_skills
        region_object = instance.region
        region_object.available_team_names.remove(instance.name)
        region_object.available_team_logos.remove(instance.logo)
        if region_object.available_team_names.count() == 0 or region_object.available_team_logos.count() == 0:
            region_object.can_create_team = False
            region_object.save()
        else:
            region_object.can_create_team = True
            region_object.save()


@receiver(post_save, sender=Team)
def udpate_team(sender, instance, **kwargs):
    if instance.players.all().count() != 0:
        print('m2m changed post_add')
        new_players_count = instance.players.all().count() + 1
        print("players count:" + str(new_players_count))
        new_players_total_skill = 0
        print("new_players_total_skill count:" + str(new_players_total_skill))
        for player in instance.players.all():
            new_players_total_skill += player.average_skill
        new_players_total_skill += instance.cap.average_skill
        print("new_players_total_skill_after_loop count:" +
            str(new_players_total_skill))
        new_team_average = round(new_players_total_skill / new_players_count)
        print("new_team_average count:" + str(new_team_average))
        instance.average_skill = new_team_average
        instance.save() #had to use this line to make sure the instance is being saved as it is post_save .. but it causes the pre_save function to be triggered .. and causes an infinite loop

и, как уже упоминалось, это вызывает бесконечный цикл, есть идеи, как достичь тех же потребностей, не попадая в этот цикл?

Вернуться на верх