diff --git a/taiga/projects/milestones/models.py b/taiga/projects/milestones/models.py index 684a62ff..3f6383d4 100644 --- a/taiga/projects/milestones/models.py +++ b/taiga/projects/milestones/models.py @@ -72,7 +72,7 @@ class Milestone(WatchedModelMixin, models.Model): super().save(*args, **kwargs) def _get_user_stories_points(self, user_stories): - role_points = [us.role_points.all().select_related('points') for us in user_stories] + role_points = [us.role_points.all() for us in user_stories] flat_role_points = itertools.chain(*role_points) flat_role_dicts = map(lambda x: {x.role_id: x.points.value if x.points.value else 0}, flat_role_points) return dict_sum(*flat_role_dicts) @@ -80,13 +80,13 @@ class Milestone(WatchedModelMixin, models.Model): @property def total_points(self): return self._get_user_stories_points( - [us for us in self.user_stories.all()] + [us for us in self.user_stories.all().prefetch_related('role_points', 'role_points__points')] ) @property def closed_points(self): return self._get_user_stories_points( - [us for us in self.user_stories.all() if us.is_closed] + [us for us in self.user_stories.all().prefetch_related('role_points', 'role_points__points') if us.is_closed] ) def _get_points_increment(self, client_requirement, team_requirement): @@ -98,7 +98,7 @@ class Milestone(WatchedModelMixin, models.Model): project_id=self.project_id, client_requirement=client_requirement, team_requirement=team_requirement - ) + ).prefetch_related('role_points', 'role_points__points') return self._get_user_stories_points(user_stories) @property @@ -125,5 +125,5 @@ class Milestone(WatchedModelMixin, models.Model): return self._get_user_stories_points([ us for us in self.user_stories.filter( finish_date__lt=date + datetime.timedelta(days=1) - ) if us.is_closed + ).prefetch_related('role_points', 'role_points__points') if us.is_closed ]) diff --git a/taiga/projects/models.py b/taiga/projects/models.py index 766fcfdf..e52c0050 100644 --- a/taiga/projects/models.py +++ b/taiga/projects/models.py @@ -237,7 +237,7 @@ class Project(ProjectDefaults, TaggedMixin, models.Model): rp_query.delete() def _get_user_stories_points(self, user_stories): - role_points = [us.role_points.all().select_related('points') for us in user_stories] + role_points = [us.role_points.all() for us in user_stories] flat_role_points = itertools.chain(*role_points) flat_role_dicts = map(lambda x: {x.role_id: x.points.value if x.points.value else 0}, flat_role_points) return dict_sum(*flat_role_dicts) @@ -253,13 +253,13 @@ class Project(ProjectDefaults, TaggedMixin, models.Model): project_id=self.id, client_requirement=client_requirement, team_requirement=team_requirement - ) + ).prefetch_related('role_points', 'role_points__points') else: user_stories = userstory_model.objects.filter( project_id=self.id, client_requirement=client_requirement, team_requirement=team_requirement - ) + ).prefetch_related('role_points', 'role_points__points') return self._get_user_stories_points(user_stories) @property @@ -284,11 +284,11 @@ class Project(ProjectDefaults, TaggedMixin, models.Model): @property def defined_points(self): - return self._get_user_stories_points(self.user_stories.all()) + return self._get_user_stories_points(self.user_stories.all().prefetch_related('role_points', 'role_points__points')) @property def assigned_points(self): - return self._get_user_stories_points(self.user_stories.filter(milestone__isnull=False)) + return self._get_user_stories_points(self.user_stories.filter(milestone__isnull=False).prefetch_related('role_points', 'role_points__points')) # User Stories common Models