Fixed the serialization problem with the optional metadata
This commit is contained in:
@@ -4,6 +4,7 @@ from django.core.exceptions import PermissionDenied
|
||||
from django.shortcuts import get_object_or_404
|
||||
|
||||
from rest_framework import generics, status, views
|
||||
from rest_framework.parsers import JSONParser
|
||||
from rest_framework.response import Response
|
||||
|
||||
from acls.models import AccessEntry
|
||||
@@ -25,7 +26,8 @@ from .permissions import (
|
||||
)
|
||||
from .serializers import (
|
||||
DocumentMetadataSerializer, DocumentNewMetadataSerializer,
|
||||
DocumentTypeNewMetadataTypeSerializer, MetadataTypeSerializer
|
||||
DocumentTypeNewMetadataTypeSerializer, MetadataTypeSerializer,
|
||||
DocumentTypeMetadataTypeSerializer
|
||||
)
|
||||
|
||||
|
||||
@@ -113,13 +115,13 @@ class APIDocumentMetadataListView(generics.ListCreateAPIView):
|
||||
serializer = self.get_serializer(data=self.request.POST)
|
||||
|
||||
if serializer.is_valid():
|
||||
metadata_type = get_object_or_404(MetadataType, pk=serializer.data['metadata_type_pk'])
|
||||
metadata_type = get_object_or_404(MetadataType, pk=serializer.data['metadata_type'])
|
||||
try:
|
||||
document.metadata.create(metadata_type=metadata_type, value=serializer.data['value'])
|
||||
except Exception as exception:
|
||||
return Response(status=status.HTTP_400_BAD_REQUEST, data={'non_field_errors': unicode(exception)})
|
||||
else:
|
||||
return Response(status=status.HTTP_201_CREATED)
|
||||
return Response(status=status.HTTP_201_CREATED, )
|
||||
else:
|
||||
return Response(status=status.HTTP_400_BAD_REQUEST, data=serializer.errors)
|
||||
|
||||
@@ -177,7 +179,7 @@ class APIDocumentTypeMetadataTypeOptionalListView(generics.ListCreateAPIView):
|
||||
except PermissionDenied:
|
||||
AccessEntry.objects.check_access(PERMISSION_DOCUMENT_TYPE_VIEW, self.request.user, document_type)
|
||||
|
||||
return document_type.metadata_type.filter(required=self.required_metadata)
|
||||
return document_type.metadata.filter(required=self.required_metadata)
|
||||
|
||||
def get(self, *args, **kwargs):
|
||||
"""Returns a list of selected document type's optional metadata types."""
|
||||
@@ -185,9 +187,9 @@ class APIDocumentTypeMetadataTypeOptionalListView(generics.ListCreateAPIView):
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.request.method == 'GET':
|
||||
return MetadataTypeSerializer
|
||||
return DocumentTypeMetadataTypeSerializer
|
||||
elif self.request.method == 'POST':
|
||||
return DocumentTypeNewMetadataType
|
||||
return DocumentTypeNewMetadataTypeSerializer
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
"""
|
||||
|
||||
@@ -4,7 +4,7 @@ from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from rest_framework import serializers
|
||||
|
||||
from .models import DocumentMetadata, MetadataType
|
||||
from .models import DocumentMetadata, MetadataType, DocumentTypeMetadataType
|
||||
|
||||
|
||||
class MetadataTypeSerializer(serializers.ModelSerializer):
|
||||
@@ -19,10 +19,16 @@ class DocumentMetadataSerializer(serializers.ModelSerializer):
|
||||
model = DocumentMetadata
|
||||
|
||||
|
||||
class DocumentTypeMetadataTypeSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
fields = ('metadata_type', )
|
||||
model = DocumentTypeMetadataType
|
||||
|
||||
|
||||
class DocumentNewMetadataSerializer(serializers.Serializer):
|
||||
metadata_type_pk = serializers.IntegerField(help_text=_('Primary key of the metadata type to be added.'))
|
||||
metadata_type = serializers.IntegerField(help_text=_('Primary key of the metadata type to be added.'))
|
||||
value = serializers.CharField(max_length=255, help_text=_('Value of the corresponding metadata type instance.'))
|
||||
|
||||
|
||||
class DocumentTypeNewMetadataTypeSerializer(serializers.Serializer):
|
||||
metadata_type_pk = serializers.IntegerField(help_text=_('Primary key of the metadata type to be added.'))
|
||||
metadata_type = serializers.IntegerField(help_text=_('Primary key of the metadata type to be added.'))
|
||||
|
||||
Reference in New Issue
Block a user