From 448400dc213068b012d644fd4afe4745da7f428d Mon Sep 17 00:00:00 2001 From: Jesaja Everling Date: Thu, 9 Feb 2017 01:21:41 +0200 Subject: [PATCH 1/2] Raise ValidationError when IntegrityError occurs for metadata_type_pk --- mayan/apps/metadata/serializers.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/mayan/apps/metadata/serializers.py b/mayan/apps/metadata/serializers.py index 12b70a50c7..36a1abdd27 100644 --- a/mayan/apps/metadata/serializers.py +++ b/mayan/apps/metadata/serializers.py @@ -1,8 +1,10 @@ from __future__ import unicode_literals +from django.db import IntegrityError from django.utils.translation import ugettext_lazy as _ from rest_framework import serializers +from rest_framework.exceptions import ValidationError from .models import DocumentMetadata, MetadataType, DocumentTypeMetadataType @@ -26,7 +28,7 @@ class DocumentMetadataSerializer(serializers.ModelSerializer): class DocumentTypeMetadataTypeSerializer(serializers.ModelSerializer): class Meta: - fields = ('metadata_type', ) + fields = ('metadata_type',) model = DocumentTypeMetadataType @@ -52,10 +54,15 @@ class DocumentNewMetadataSerializer(serializers.Serializer): metadata_type = MetadataType.objects.get( pk=validated_data['metadata_type_pk'] ) - instance = self.document.metadata.create( - metadata_type=metadata_type, value=validated_data['value'] - ) - return instance + try: + instance = self.document.metadata.create( + metadata_type=metadata_type, value=validated_data['value'] + ) + return instance + except IntegrityError: + detail = 'Metadata type with pk {} is already defined for Document with pk {}'.format(metadata_type.pk, + self.document.pk) + raise ValidationError(detail) class DocumentTypeNewMetadataTypeSerializer(serializers.Serializer): From 280f0e74be8faebea78a09a62772b37b16c46d60 Mon Sep 17 00:00:00 2001 From: Jesaja Everling Date: Thu, 9 Feb 2017 20:13:14 +0200 Subject: [PATCH 2/2] Passing `self.request.data` to serializer not `self.request.POST` --- mayan/apps/metadata/api_views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mayan/apps/metadata/api_views.py b/mayan/apps/metadata/api_views.py index 569a95277d..5bda3a6138 100644 --- a/mayan/apps/metadata/api_views.py +++ b/mayan/apps/metadata/api_views.py @@ -266,7 +266,7 @@ class APIDocumentTypeMetadataTypeOptionalListView(generics.ListCreateAPIView): document_type ) - serializer = self.get_serializer(data=self.request.POST) + serializer = self.get_serializer(data=self.request.data) if serializer.is_valid(): metadata_type = get_object_or_404(