diff --git a/taiga/projects/issues/api.py b/taiga/projects/issues/api.py index d2582223..681e8534 100644 --- a/taiga/projects/issues/api.py +++ b/taiga/projects/issues/api.py @@ -102,8 +102,6 @@ class IssuesOrdering(filters.FilterBackend): class IssueViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMixin, ModelCrudViewSet): - serializer_class = serializers.IssueNeighborsSerializer - list_serializer_class = serializers.IssueSerializer permission_classes = (permissions.IssuePermission, ) filter_backends = (filters.CanViewIssuesFilterBackend, filters.QFilter, @@ -121,6 +119,12 @@ class IssueViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMixin, "assigned_to", "subject") + def get_serializer_class(self, *args, **kwargs): + if self.action in ["retrieve", "by_ref"]: + return serializers.IssueNeighborsSerializer + + return serializers.IssueSerializer + def get_queryset(self): qs = models.Issue.objects.all() qs = qs.prefetch_related("attachments") @@ -187,7 +191,7 @@ class IssueViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMixin, status=project.default_issue_status, severity=project.default_severity, priority=project.default_priority, type=project.default_issue_type, callback=self.post_save, precall=self.pre_save) - issues_serialized = self.serializer_class(issues, many=True) + issues_serialized = self.get_serializer_class()(issues, many=True) return response.Ok(data=issues_serialized.data) diff --git a/taiga/projects/tasks/api.py b/taiga/projects/tasks/api.py index 2f1c008b..db62d9c1 100644 --- a/taiga/projects/tasks/api.py +++ b/taiga/projects/tasks/api.py @@ -37,13 +37,17 @@ from . import services class TaskViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMixin, ModelCrudViewSet): model = models.Task - serializer_class = serializers.TaskNeighborsSerializer - list_serializer_class = serializers.TaskSerializer permission_classes = (permissions.TaskPermission,) filter_backends = (filters.CanViewTasksFilterBackend,) filter_fields = ["user_story", "milestone", "project", "assigned_to", "status__is_closed", "watchers"] + def get_serializer_class(self, *args, **kwargs): + if self.action in ["retrieve", "by_ref"]: + return serializers.TaskNeighborsSerializer + + return serializers.TaskSerializer + def pre_save(self, obj): if obj.user_story: obj.milestone = obj.user_story.milestone @@ -97,7 +101,7 @@ class TaskViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMixin, data["bulk_tasks"], milestone_id=data["sprint_id"], user_story_id=data["us_id"], status_id=data.get("status_id") or project.default_task_status_id, project=project, owner=request.user, callback=self.post_save, precall=self.pre_save) - tasks_serialized = self.serializer_class(tasks, many=True) + tasks_serialized = self.get_serializer_class()(tasks, many=True) return response.Ok(tasks_serialized.data) diff --git a/taiga/projects/userstories/api.py b/taiga/projects/userstories/api.py index b3e6ed05..30313536 100644 --- a/taiga/projects/userstories/api.py +++ b/taiga/projects/userstories/api.py @@ -46,8 +46,6 @@ from . import services class UserStoryViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMixin, ModelCrudViewSet): model = models.UserStory - serializer_class = serializers.UserStoryNeighborsSerializer - list_serializer_class = serializers.UserStorySerializer permission_classes = (permissions.UserStoryPermission,) filter_backends = (filters.StatusFilter, filters.CanViewUsFilterBackend, filters.TagsFilter, @@ -59,6 +57,12 @@ class UserStoryViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMi "status__is_closed", "watchers", "is_closed"] order_by_fields = ["backlog_order", "sprint_order", "kanban_order"] + def get_serializer_class(self, *args, **kwargs): + if self.action in ["retrieve", "by_ref"]: + return serializers.UserStoryNeighborsSerializer + + return serializers.UserStorySerializer + # Specific filter used for filtering neighbor user stories _neighbor_tags_filter = filters.TagsFilter('neighbor_tags') @@ -131,7 +135,7 @@ class UserStoryViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMi data["bulk_stories"], project=project, owner=request.user, status_id=data.get("status_id") or project.default_us_status_id, callback=self.post_save, precall=self.pre_save) - user_stories_serialized = self.serializer_class(user_stories, many=True) + user_stories_serialized = self.get_serializer_class()(user_stories, many=True) return response.Ok(user_stories_serialized.data) return response.BadRequest(serializer.errors)