From 7e34a4c28ba34e17927eb6678102740ca7a61df7 Mon Sep 17 00:00:00 2001 From: Ernesto Rico Schmidt <ernesto@helsinki.at> Date: Fri, 14 Oct 2022 20:50:51 -0400 Subject: [PATCH] Add method to list shows by filtering --- poetry.lock | 6 +++--- program/views.py | 20 +++++++++++++++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3650b14b..294f0203 100644 --- a/poetry.lock +++ b/poetry.lock @@ -602,7 +602,7 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" -version = "65.4.1" +version = "65.5.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false @@ -1116,8 +1116,8 @@ requests = [ {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, ] setuptools = [ - {file = "setuptools-65.4.1-py3-none-any.whl", hash = "sha256:1b6bdc6161661409c5f21508763dc63ab20a9ac2f8ba20029aaaa7fdb9118012"}, - {file = "setuptools-65.4.1.tar.gz", hash = "sha256:3050e338e5871e70c72983072fe34f6032ae1cdeeeb67338199c2f74e083a80e"}, + {file = "setuptools-65.5.0-py3-none-any.whl", hash = "sha256:f62ea9da9ed6289bfe868cd6845968a2c854d1427f8548d52cae02a42b4f0356"}, + {file = "setuptools-65.5.0.tar.gz", hash = "sha256:512e5536220e38146176efb833d4a62aa726b7bbff82cfbc8ba9eaa3996e0b17"}, ] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, diff --git a/program/views.py b/program/views.py index b83cd17a..00570176 100644 --- a/program/views.py +++ b/program/views.py @@ -29,8 +29,9 @@ from rest_framework.pagination import LimitOffsetPagination from rest_framework.response import Response from django.contrib.auth.models import User +from django.core.exceptions import FieldError from django.http import HttpResponse -from django.shortcuts import get_object_or_404 +from django.shortcuts import get_list_or_404, get_object_or_404 from django.utils import timezone from django.utils.translation import gettext as _ from program import filters @@ -274,6 +275,23 @@ class APIShowViewSet(DisabledObjectPermissionCheckMixin, viewsets.ModelViewSet): pagination_class = LimitOffsetPagination filterset_class = filters.ShowFilterSet + def list(self, request, *args, **kwargs): + filter_kwargs = {} + for key, value in request.query_params.items(): + filter_kwargs[key] = value + + try: + queryset = get_list_or_404(self.get_queryset(), **filter_kwargs) + except FieldError: + queryset = None + + if page := self.paginate_queryset(queryset) is not None: + serializer = self.get_serializer(page, many=True) + return self.get_paginated_response(serializer.data) + + serializer = self.get_serializer(queryset, many=True) + return Response(serializer.data) + def get_object(self): queryset = self.filter_queryset(self.get_queryset()) lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field -- GitLab