from django.db.models.signals import post_save from django.dispatch import receiver from apps.tasks.models import Task @receiver(post_save, sender=Task) def recalculate_project_on_task_change(sender, instance: Task, **kwargs): from apps.projects.models import ProjectStepItem from apps.projects.services import refresh_project_status item = ( ProjectStepItem.objects .filter(task_id=instance.pk) .select_related('step__project') .first() ) if item is None: return item.step.refresh_status(save=True) refresh_project_status(item.step.project)