72 lines
2.3 KiB
Python
72 lines
2.3 KiB
Python
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
|
|
|
|
|
|
class MetadataTypeSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
fields = (
|
|
'id', 'name', 'label', 'default', 'lookup', 'parser', 'validation'
|
|
)
|
|
model = MetadataType
|
|
|
|
|
|
class DocumentMetadataSerializer(serializers.ModelSerializer):
|
|
document = serializers.PrimaryKeyRelatedField(read_only=True)
|
|
|
|
class Meta:
|
|
fields = ('document', 'id', 'metadata_type', 'value',)
|
|
model = DocumentMetadata
|
|
read_only_fields = ('metadata_type',)
|
|
|
|
|
|
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.'),
|
|
write_only=True
|
|
)
|
|
|
|
metadata_type = MetadataTypeSerializer(read_only=True)
|
|
|
|
pk = serializers.IntegerField(
|
|
help_text=_('Primary key of the document metadata type.'),
|
|
read_only=True
|
|
)
|
|
|
|
value = serializers.CharField(
|
|
max_length=255,
|
|
help_text=_('Value of the corresponding metadata type instance.')
|
|
)
|
|
|
|
def create(self, validated_data):
|
|
metadata_type = MetadataType.objects.get(
|
|
pk=validated_data['metadata_type_pk']
|
|
)
|
|
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):
|
|
metadata_type_pk = serializers.IntegerField(
|
|
help_text=_('Primary key of the metadata type to be added.')
|
|
)
|