diff --git a/program/serializers.py b/program/serializers.py index e151996479f027c8987d926c3c41b978d2f29c79..deb5e16348a58dd183d7b14119f119580773f57a 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."""