From 38bc37e52bb87ab7fc3051f7e27fd6820ceb1793 Mon Sep 17 00:00:00 2001 From: Ernesto Rico Schmidt <ernesto@helsinki.at> Date: Mon, 12 Feb 2024 14:43:37 -0400 Subject: [PATCH] feat: catch integrity errors and return an error code and message Closes: #188 --- program/views.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/program/views.py b/program/views.py index ffb7119a..187cd2ed 100644 --- a/program/views.py +++ b/program/views.py @@ -34,6 +34,7 @@ from rest_framework.response import Response from django.conf import settings from django.contrib.auth.models import User +from django.db import IntegrityError from django.http import Http404, HttpResponse, JsonResponse from django.shortcuts import get_object_or_404 from django.utils import timezone @@ -383,7 +384,15 @@ class APIShowViewSet(DisabledObjectPermissionCheckMixin, viewsets.ModelViewSet): ) if serializer.is_valid(raise_exception=True): - serializer.save() + try: + serializer.save() + except IntegrityError: + data = { + "slug": {"code": "unique", "message": "show with this slug already exists."} + } + + return Response(data, status=status.HTTP_400_BAD_REQUEST) + return Response(serializer.data, status=status.HTTP_201_CREATED) def update(self, request, *args, **kwargs): @@ -398,8 +407,15 @@ class APIShowViewSet(DisabledObjectPermissionCheckMixin, viewsets.ModelViewSet): ) if serializer.is_valid(raise_exception=True): - serializer.save() - return Response(serializer.data) + try: + serializer.save() + return Response(serializer.data) + except IntegrityError: + data = { + "slug": {"code": "unique", "message": "show with this slug already exists."} + } + + return Response(data, status=status.HTTP_400_BAD_REQUEST) def partial_update(self, request, *args, **kwargs): kwargs["partial"] = True -- GitLab