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( 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):