Fixed the serialization problem with the optional metadata

This commit is contained in:
Gabriele Platania
2015-01-19 17:46:11 +01:00
parent 7459f44f6b
commit 157f351a08
2 changed files with 17 additions and 9 deletions

View File

@@ -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):
"""

View File

@@ -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.'))