mirror of
https://github.com/Hopiu/wagtail.git
synced 2026-04-28 18:44:50 +00:00
Move ForExplorerFilter into Admin API implementation
Not generally useful in the Public API
This commit is contained in:
parent
16d5b5c99e
commit
4e5587918a
3 changed files with 21 additions and 20 deletions
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue