diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py index 4a3990f35a901132c0d14f90e2af8734a703420c..e88c4bfbc81deeb26d6dd3211729fe71331ec0eb 100644 --- a/djangoldp/serializers.py +++ b/djangoldp/serializers.py @@ -270,35 +270,39 @@ class LDPSerializer(HyperlinkedModelSerializer): class JSonLDPropertyField(ReadOnlyField): def to_representation(self, instance): from djangoldp.views import LDPViewSet - try: - model_class = instance.model - except : - model_class = instance.__class__ - serializer_generator = LDPViewSet(model=model_class, - lookup_field=Model.get_meta(model_class, 'lookup_field', 'pk'), - permission_classes=Model.get_meta(model_class, - 'permission_classes', - [LDPPermissions]), - fields=Model.get_meta(model_class, 'serializer_fields', []), - nested_fields=Model.get_meta(model_class, 'nested_fields', [])) - parent_depth = max(getattr(self.parent.Meta, "depth", 0) - 1, 0) - serializer_generator.depth = parent_depth - serializer = serializer_generator.build_read_serializer()(context=self.parent.context) - if parent_depth is 0: - serializer.Meta.fields = ["@id"] - - if isinstance(instance, QuerySet): - data = list(instance) - - return {'@id': '{}{}{}/'.format(settings.SITE_URL, '{}{}/', self.source), - '@type': 'ldp:Container', - 'ldp:contains': [serializer.to_representation(item) if item is not None else None for item - in data], - 'permissions': Model.get_permissions(self.parent.Meta.model, self.context['request'].user, - ['view', 'add']) - } + + if isinstance(instance, QuerySet) or isinstance(instance, Model): + try: + model_class = instance.model + except : + model_class = instance.__class__ + serializer_generator = LDPViewSet(model=model_class, + lookup_field=Model.get_meta(model_class, 'lookup_field', 'pk'), + permission_classes=Model.get_meta(model_class, + 'permission_classes', + [LDPPermissions]), + fields=Model.get_meta(model_class, 'serializer_fields', []), + nested_fields=Model.get_meta(model_class, 'nested_fields', [])) + parent_depth = max(getattr(self.parent.Meta, "depth", 0) - 1, 0) + serializer_generator.depth = parent_depth + serializer = serializer_generator.build_read_serializer()(context=self.parent.context) + if parent_depth is 0: + serializer.Meta.fields = ["@id"] + + if isinstance(instance, QuerySet): + data = list(instance) + + return {'@id': '{}{}{}/'.format(settings.SITE_URL, '{}{}/', self.source), + '@type': 'ldp:Container', + 'ldp:contains': [serializer.to_representation(item) if item is not None else None for item + in data], + 'permissions': Model.get_permissions(self.parent.Meta.model, self.context['request'].user, + ['view', 'add']) + } + else: + return serializer.to_representation(instance) else: - return serializer.to_representation(instance) + return instance field_class = JSonLDPropertyField field_kwargs = {}