Bug#199: Now work correctly the filtering of next/prev on retrieve actions

remotes/origin/enhancement/email-actions
Jesús Espino 2014-03-07 14:15:57 +01:00
parent 5b99acd2a2
commit d9ab184d0a
4 changed files with 15 additions and 5 deletions

View File

@ -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

View File

@ -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),

View File

@ -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")

View File

@ -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"