diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py index 68e4d6c7cd549a67d759da2c92556232659fe54e..09f98d4b7ea1eedae65319dc882cb40f459e6a8b 100644 --- a/djangoldp/serializers.py +++ b/djangoldp/serializers.py @@ -10,10 +10,18 @@ from guardian.shortcuts import get_perms class ContainerSerializer(ListSerializer): id='' - def to_representation(self, data): - return {'@id': self.id, 'ldp:contains':super(ContainerSerializer, self).to_representation(data)} + def to_internal_value(self, data): + data = json.loads(data) + if isinstance(data, dict): + data = [data] + return [self.child_relation.to_internal_value(item['@id']) for item in data] + def to_representation(self, value): + return {'@id': self.id, 'ldp:contains': super().to_representation(value)} def get_attribute(self, instance): - self.id = self.parent.context['request'].get_full_path()+self.field_name+"/" + parent_id_field = self.parent.fields[self.parent.url_field_name] + context = self.parent.context + parent_id = parent_id_field.get_url(instance, parent_id_field.view_name, context['request'], context['format']) + self.id = parent_id + self.field_name+"/" return super().get_attribute(instance) @property def data(self): @@ -32,18 +40,6 @@ class JsonLdField(HyperlinkedRelatedField): except MultiValueDictKeyError: pass -class ManyJsonLdRelatedField(ManyRelatedField): - def to_internal_value(self, data): - data = json.loads(data) - if isinstance(data, dict): - data = [data] - return [self.child_relation.to_internal_value(item['@id']) for item in data] - def to_representation(self, value): - return {'@id': self.id, 'ldp:contains': super().to_representation(value)} - def get_attribute(self, instance): - self.id = self.parent.context['request'].get_full_path()+self.field_name+"/" - return super().get_attribute(instance) - class JsonLdRelatedField(JsonLdField): def to_representation(self, value): try: @@ -63,7 +59,7 @@ class JsonLdRelatedField(JsonLdField): for key in kwargs: if key in MANY_RELATION_KWARGS: list_kwargs[key] = kwargs[key] - return ManyJsonLdRelatedField(**list_kwargs) + return ContainerSerializer(**list_kwargs) class JsonLdIdentityField(JsonLdField): def __init__(self, view_name=None, **kwargs): @@ -90,13 +86,13 @@ class LDPSerializer(HyperlinkedModelSerializer): return data def build_nested_field(self, field_name, relation_info, nested_depth): - class NestedSerializer(self.__class__): + class NestedLDPSerializer(self.__class__): class Meta: model = relation_info.related_model depth = nested_depth - 1 fields = '__all__' - return NestedSerializer, get_nested_relation_kwargs(relation_info) + return NestedLDPSerializer, get_nested_relation_kwargs(relation_info) @classmethod def many_init(cls, *args, **kwargs): diff --git a/setup.py b/setup.py index 15a133988f5d39d9eb3334e2727162ccd56e5529..60474fdc48dad32c5ff514f1647fee5936ea195d 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup setup( name='djangoldp', - version='0.5a2', + version='0.5a4', url='https://git.happy-dev.fr/happy-dev/djangoldp/', author="Startin'blox", author_email='sylvain@happy-dev.fr',