diff --git a/example/tests/unit/test_default_drf_serializers.py b/example/tests/unit/test_default_drf_serializers.py index 87231896..c078dc06 100644 --- a/example/tests/unit/test_default_drf_serializers.py +++ b/example/tests/unit/test_default_drf_serializers.py @@ -104,6 +104,19 @@ def test_blog_create(client): assert resp.json() == expected +@pytest.mark.django_db +def test_rest_action_request(client): + url = reverse("drf-entry-blog-list") + "/actions/custom_response" + name = "Dummy Name" + request_data = { + "data": {"attributes": {"name": name}, "type": "blogs"}, + } + + resp = client.post(url, request_data) + + assert resp.status_code == 400 + + @pytest.mark.django_db def test_get_object_gives_correct_blog(client, blog, entry): url = reverse("drf-entry-blog-detail", kwargs={"entry_pk": entry.id}) diff --git a/example/views.py b/example/views.py index da171698..690e38b6 100644 --- a/example/views.py +++ b/example/views.py @@ -1,9 +1,11 @@ +import logging import rest_framework.exceptions as exceptions import rest_framework.parsers import rest_framework.renderers from django_filters import rest_framework as filters from rest_framework.filters import SearchFilter - +from rest_framework.response import Response +from rest_framework.decorators import action import rest_framework_json_api.metadata import rest_framework_json_api.parsers import rest_framework_json_api.renderers @@ -74,6 +76,18 @@ def get_object(self): return super().get_object() + @action(url_path="actions/custom_response", detail=False, methods=["post"]) + def custom_response(self, request): + data = request.data + serializer = self.get_serializer(data=data) + serializer.is_valid(raise_exception=True) + self.perform_create(serializer) + try: + test = 1/0 + except Exception: + return Response(status=400) + + return Response(status=201) class JsonApiViewSet(ModelViewSet): """ @@ -257,7 +271,6 @@ def get_queryset(self, *args, **kwargs): return queryset - class CompanyViewset(ModelViewSet): queryset = Company.objects.all() serializer_class = CompanySerializer @@ -276,7 +289,6 @@ class ProjectTypeViewset(ModelViewSet): class EntryRelationshipView(RelationshipView): queryset = Entry.objects.all() - class BlogRelationshipView(RelationshipView): queryset = Blog.objects.all() diff --git a/rest_framework_json_api/utils.py b/rest_framework_json_api/utils.py index e12080ac..66b46435 100644 --- a/rest_framework_json_api/utils.py +++ b/rest_framework_json_api/utils.py @@ -474,6 +474,6 @@ def format_error_object(message, pointer, response): def format_errors(data): - if len(data) > 1 and isinstance(data, list): + if isinstance(data, list) and len(data) > 1: data.sort(key=lambda x: x.get("source", {}).get("pointer", "")) return {"errors": data} pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy