From 0c202527912290371e1c9674e12feb3938cdc081 Mon Sep 17 00:00:00 2001 From: Ernesto Rico Schmidt <ernesto@helsinki.at> Date: Tue, 26 Mar 2024 17:40:00 -0400 Subject: [PATCH] feat: raise a ValidationError if a note for this timeslot already exists --- program/serializers.py | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/program/serializers.py b/program/serializers.py index e1519964..deb5e163 100644 --- a/program/serializers.py +++ b/program/serializers.py @@ -28,6 +28,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.utils import text, timezone from program.models import ( Category, @@ -1023,22 +1024,27 @@ class NoteSerializer(serializers.ModelSerializer): # optional foreign key validated_data["image"] = validated_data.pop("image", None) - note = Note.objects.create( - created_by=self.context.get("request").user.username, - **validated_data, - ) - - note.contributors.set(contributors) - note.language.set(language) - note.topic.set(topic) + try: + note = Note.objects.create( + created_by=self.context.get("request").user.username, + **validated_data, + ) + except IntegrityError: + raise exceptions.ValidationError( + code="duplicate", detail="note for this timeslot already exists." + ) + else: + note.contributors.set(contributors) + note.language.set(language) + note.topic.set(topic) - # optional nested objects - for link_data in links_data: - NoteLink.objects.create(note=note, **link_data) + # optional nested objects + for link_data in links_data: + NoteLink.objects.create(note=note, **link_data) - note.save() + note.save() - return note + return note def update(self, instance, validated_data): """Update and return an existing Note instance, given the validated data.""" -- GitLab