浏览代码

Move ForExplorerFilter into Admin API implementation

Not generally useful in the Public API
Karl Hobley 5 年之前
父节点
当前提交
4e5587918a
共有 3 个文件被更改,包括 21 次插入20 次删除
  1. 2 2
      wagtail/admin/api/endpoints.py
  2. 18 0
      wagtail/admin/api/filters.py
  3. 1 18
      wagtail/api/v2/filters.py

+ 2 - 2
wagtail/admin/api/endpoints.py

@@ -4,12 +4,12 @@ from rest_framework.authentication import SessionAuthentication
 
 from wagtail.api.v2.endpoints import PagesAPIViewSet
 from wagtail.api.v2.filters import (
-    ChildOfFilter, DescendantOfFilter, FieldsFilter, ForExplorerFilter, OrderingFilter,
+    ChildOfFilter, DescendantOfFilter, FieldsFilter, OrderingFilter,
     SearchFilter)
 from wagtail.api.v2.utils import BadRequestError, filter_page_type, page_models_from_string
 from wagtail.core.models import Page
 
-from .filters import HasChildrenFilter
+from .filters import ForExplorerFilter, HasChildrenFilter
 from .serializers import AdminPageSerializer
 
 

+ 18 - 0
wagtail/admin/api/filters.py

@@ -1,6 +1,8 @@
 from rest_framework.filters import BaseFilterBackend
 
 from wagtail.api.v2.utils import BadRequestError, parse_boolean
+from wagtail.core import hooks
+from wagtail.core.models import UserPagePermissionsProxy
 
 
 class HasChildrenFilter(BaseFilterBackend):
@@ -21,3 +23,19 @@ class HasChildrenFilter(BaseFilterBackend):
                 return queryset.filter(numchild=0)
 
         return queryset
+
+
+class ForExplorerFilter(BaseFilterBackend):
+    def filter_queryset(self, request, queryset, view):
+        if request.GET.get('for_explorer'):
+            if not hasattr(queryset, '_filtered_by_child_of'):
+                raise BadRequestError("filtering by for_explorer without child_of is not supported")
+
+            parent_page = queryset._filtered_by_child_of
+            for hook in hooks.get_hooks('construct_explorer_page_queryset'):
+                queryset = hook(parent_page, queryset, request)
+
+            user_perms = UserPagePermissionsProxy(request.user)
+            queryset = queryset & user_perms.explorable_pages()
+
+        return queryset

+ 1 - 18
wagtail/api/v2/filters.py

@@ -3,8 +3,7 @@ from django.db import models
 from rest_framework.filters import BaseFilterBackend
 from taggit.managers import TaggableManager
 
-from wagtail.core import hooks
-from wagtail.core.models import Page, UserPagePermissionsProxy
+from wagtail.core.models import Page
 from wagtail.search.backends import get_search_backend
 from wagtail.search.backends.base import FilterFieldError, OrderByFieldError
 
@@ -219,19 +218,3 @@ class RestrictedDescendantOfFilter(DescendantOfFilter):
     def get_page_by_id(self, request, page_id):
         site_pages = pages_for_site(request.site)
         return site_pages.get(id=page_id)
-
-
-class ForExplorerFilter(BaseFilterBackend):
-    def filter_queryset(self, request, queryset, view):
-        if request.GET.get('for_explorer'):
-            if not hasattr(queryset, '_filtered_by_child_of'):
-                raise BadRequestError("filtering by for_explorer without child_of is not supported")
-
-            parent_page = queryset._filtered_by_child_of
-            for hook in hooks.get_hooks('construct_explorer_page_queryset'):
-                queryset = hook(parent_page, queryset, request)
-
-            user_perms = UserPagePermissionsProxy(request.user)
-            queryset = queryset & user_perms.explorable_pages()
-
-        return queryset