From 8bd297eeea7f04c456787c42ca48313e1af596dd Mon Sep 17 00:00:00 2001 From: Ernesto Rico Schmidt <ernesto@helsinki.at> Date: Tue, 12 Nov 2024 15:32:03 -0400 Subject: [PATCH] feat: raise ValidationError on IntegrityError in PlaylistSerializer --- program/serializers.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/program/serializers.py b/program/serializers.py index 9f5ad200..87b1e0f5 100644 --- a/program/serializers.py +++ b/program/serializers.py @@ -30,6 +30,7 @@ from rest_framework.permissions import exceptions from django.conf import settings from django.contrib.auth.models import User from django.core.exceptions import ObjectDoesNotExist +from django.db import IntegrityError from django.db.models import Q from django.utils import text, timezone from program.models import ( @@ -1524,7 +1525,13 @@ class PlaylistSerializer(serializers.ModelSerializer): playlist = Playlist.objects.create(created_by=user.username, **validated_data) for entry_data in entries: - PlaylistEntry.objects.create(playlist=playlist, **entry_data) + try: + PlaylistEntry.objects.create(playlist=playlist, **entry_data) + except IntegrityError: + raise exceptions.ValidationError( + code="playlist-entry-file-id-or-uri", + detail="playlist entries must either have file id or uri.", + ) return playlist @@ -1552,7 +1559,13 @@ class PlaylistSerializer(serializers.ModelSerializer): entry.delete(keep_parents=True) for entry_data in validated_data.get("entries"): - PlaylistEntry.objects.create(playlist=instance, **entry_data) + try: + PlaylistEntry.objects.create(playlist=instance, **entry_data) + except IntegrityError: + raise exceptions.ValidationError( + code="playlist-entry-file-id-or-uri", + detail="playlist entries must either have file id or uri.", + ) instance.save() -- GitLab