Bug#199: Now work correctly the filtering of next/prev on retrieve actions
parent
5b99acd2a2
commit
d9ab184d0a
|
@ -42,6 +42,14 @@ class ListModelMixin(mixins.ListModelMixin):
|
|||
return super().list(*args, **kwargs)
|
||||
|
||||
|
||||
class NeighborsApiMixin:
|
||||
def filter_queryset(self, queryset, force=False):
|
||||
for backend in self.get_filter_backends():
|
||||
if force or self.action != "retrieve" or backend not in self.retrieve_exclude_filters:
|
||||
queryset = backend().filter_queryset(self.request, queryset, self)
|
||||
return queryset
|
||||
|
||||
|
||||
class DestroyModelMixin(mixins.DestroyModelMixin):
|
||||
"""
|
||||
Self version of DestroyModelMixin with
|
||||
|
|
|
@ -91,7 +91,7 @@ class NeighborsSerializerMixin:
|
|||
def get_neighbors(self, obj):
|
||||
view, request = self.context.get("view", None), self.context.get("request", None)
|
||||
if view and request:
|
||||
queryset = view.filter_queryset(view.get_queryset())
|
||||
queryset = view.filter_queryset(view.get_queryset(), True)
|
||||
previous, next = obj.get_neighbors(queryset)
|
||||
|
||||
return {"previous": self.serialize_neighbor(previous),
|
||||
|
|
|
@ -13,7 +13,7 @@ from rest_framework import filters
|
|||
|
||||
from taiga.base import filters
|
||||
from taiga.base import exceptions as exc
|
||||
from taiga.base.api import ModelCrudViewSet
|
||||
from taiga.base.api import ModelCrudViewSet, NeighborsApiMixin
|
||||
from taiga.base.notifications.api import NotificationSenderMixin
|
||||
from taiga.projects.permissions import AttachmentPermission
|
||||
from taiga.projects.serializers import AttachmentSerializer
|
||||
|
@ -85,13 +85,14 @@ class IssuesOrdering(filters.FilterBackend):
|
|||
return queryset
|
||||
|
||||
|
||||
class IssueViewSet(NotificationSenderMixin, ModelCrudViewSet):
|
||||
class IssueViewSet(NeighborsApiMixin, NotificationSenderMixin, ModelCrudViewSet):
|
||||
model = models.Issue
|
||||
serializer_class = serializers.IssueNeighborsSerializer
|
||||
list_serializer_class = serializers.IssueSerializer
|
||||
permission_classes = (IsAuthenticated, permissions.IssuePermission)
|
||||
|
||||
filter_backends = (filters.IsProjectMemberFilterBackend, IssuesFilter, IssuesOrdering)
|
||||
retrieve_exclude_filters = (IssuesFilter,)
|
||||
filter_fields = ("project",)
|
||||
order_by_fields = ("severity", "status", "priority", "created_date", "modified_date", "owner",
|
||||
"assigned_to", "subject")
|
||||
|
|
|
@ -14,7 +14,7 @@ from rest_framework import status
|
|||
from taiga.base import filters
|
||||
from taiga.base import exceptions as exc
|
||||
from taiga.base.permissions import has_project_perm
|
||||
from taiga.base.api import ModelCrudViewSet
|
||||
from taiga.base.api import ModelCrudViewSet, NeighborsApiMixin
|
||||
from taiga.base.notifications.api import NotificationSenderMixin
|
||||
from taiga.projects.permissions import AttachmentPermission
|
||||
from taiga.projects.serializers import AttachmentSerializer
|
||||
|
@ -55,13 +55,14 @@ class UserStoryAttachmentViewSet(ModelCrudViewSet):
|
|||
"add attachments to this user story"))
|
||||
|
||||
|
||||
class UserStoryViewSet(NotificationSenderMixin, ModelCrudViewSet):
|
||||
class UserStoryViewSet(NeighborsApiMixin, NotificationSenderMixin, ModelCrudViewSet):
|
||||
model = models.UserStory
|
||||
serializer_class = serializers.UserStoryNeighborsSerializer
|
||||
list_serializer_class = serializers.UserStorySerializer
|
||||
permission_classes = (IsAuthenticated, permissions.UserStoryPermission)
|
||||
|
||||
filter_backends = (filters.IsProjectMemberFilterBackend, filters.TagsFilter)
|
||||
retrieve_exclude_filters = (filters.TagsFilter,)
|
||||
filter_fields = ['project', 'milestone', 'milestone__isnull', 'status']
|
||||
|
||||
create_notification_template = "create_userstory_notification"
|
||||
|
|
Loading…
Reference in New Issue