From 30f0318de6a771e200fbe6a4e1eb008b046225d2 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 3 Jun 2019 10:19:16 +0200 Subject: [PATCH] API: Add stable and configurable filtering to events and organizers endpoints --- doc/api/resources/events.rst | 3 +++ doc/api/resources/organizers.rst | 2 ++ src/pretix/api/views/event.py | 2 ++ src/pretix/api/views/organizer.py | 5 ++++- 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/doc/api/resources/events.rst b/doc/api/resources/events.rst index a4173197ac..216aa865d8 100644 --- a/doc/api/resources/events.rst +++ b/doc/api/resources/events.rst @@ -116,6 +116,9 @@ Endpoints :query is_future: If set to ``true`` (``false``), only events that happen currently or in the future are (not) returned. Event series are never (always) returned. :query is_past: If set to ``true`` (``false``), only events that are over are (not) returned. Event series are never (always) returned. :query ends_after: If set to a date and time, only events that happen during of after the given time are returned. Event series are never returned. + :query string ordering: Manually set the ordering of results. Valid fields to be used are ``date_from`` and + ``slug``. Keep in mind that ``date_from`` of event series does not really tell you anything. + Default: ``slug``. :param organizer: The ``slug`` field of a valid organizer :statuscode 200: no error :statuscode 401: Authentication failure diff --git a/doc/api/resources/organizers.rst b/doc/api/resources/organizers.rst index b938c3aa97..40f2a887a5 100644 --- a/doc/api/resources/organizers.rst +++ b/doc/api/resources/organizers.rst @@ -56,6 +56,8 @@ Endpoints } :query page: The page number in case of a multi-page result set, default is 1 + :query string ordering: Manually set the ordering of results. Valid fields to be used are ``slug`` and + ``name``. Default: ``slug``. :statuscode 200: no error :statuscode 401: Authentication failure diff --git a/src/pretix/api/views/event.py b/src/pretix/api/views/event.py index 511d412754..4571cdd1d5 100644 --- a/src/pretix/api/views/event.py +++ b/src/pretix/api/views/event.py @@ -72,6 +72,8 @@ class EventViewSet(viewsets.ModelViewSet): lookup_url_kwarg = 'event' permission_classes = (EventCRUDPermission,) filter_backends = (DjangoFilterBackend, filters.OrderingFilter) + ordering = ('slug',) + ordering_fields = ('date_from', 'slug') filterset_class = EventFilter def get_queryset(self): diff --git a/src/pretix/api/views/organizer.py b/src/pretix/api/views/organizer.py index 9e323386e1..8a15d5c3da 100644 --- a/src/pretix/api/views/organizer.py +++ b/src/pretix/api/views/organizer.py @@ -1,4 +1,4 @@ -from rest_framework import viewsets +from rest_framework import filters, viewsets from pretix.api.models import OAuthAccessToken from pretix.api.serializers.organizer import OrganizerSerializer @@ -10,6 +10,9 @@ class OrganizerViewSet(viewsets.ReadOnlyModelViewSet): queryset = Organizer.objects.none() lookup_field = 'slug' lookup_url_kwarg = 'organizer' + filter_backends = (filters.OrderingFilter,) + ordering = ('slug',) + ordering_fields = ('name', 'slug') def get_queryset(self): if self.request.user.is_authenticated: