diff --git a/serializers.py b/serializers.py index 2080dfaed44563ee0b42eda2c0058b74cfbe3a53..0b08172886563f4f66583fbc6cc9bf6e635cbaf7 100644 --- a/serializers.py +++ b/serializers.py @@ -1,3 +1,4 @@ +from django.core.exceptions import ImproperlyConfigured from django.core.urlresolvers import get_resolver from django.utils.datastructures import MultiValueDictKeyError from rest_framework.relations import HyperlinkedRelatedField, ManyRelatedField @@ -22,7 +23,10 @@ class JsonLdRelatedField(HyperlinkedRelatedField): except MultiValueDictKeyError: pass def to_representation(self, value): - return {'@id': super().to_representation(value)} + try: + return {'@id': super().to_representation(value)} + except ImproperlyConfigured: + return value.pk class LDPSerializer(HyperlinkedModelSerializer): url_field_name = "@id" diff --git a/views.py b/views.py index 8aad72cbef1b3c21eaf36496abb390780630a5c9..f769e41ce102a3ae08d7369e5e20fa91cbda5cb6 100644 --- a/views.py +++ b/views.py @@ -28,14 +28,20 @@ class NoCSRFAuthentication(SessionAuthentication): class LDPViewSet(ModelViewSet): model = None + fields = None renderer_classes = (JSONLDRenderer, ) parser_classes = (JSONLDParser, ) authentication_classes = (NoCSRFAuthentication,) def __init__(self, **kwargs): super().__init__(**kwargs) - class_attrs = {'Meta': type('Meta', (), {'model': self.model, 'exclude': ()})} - self.serializer_class = type(LDPSerializer)(self.model._meta.object_name.lower()+'Serializer', (LDPSerializer,), class_attrs) + meta_args = {'model': self.model} + if self.fields: + meta_args['fields'] = self.fields + else: + meta_args['exclude'] = () + meta_class = type('Meta', (), meta_args) + self.serializer_class = type(LDPSerializer)(self.model._meta.object_name.lower()+'Serializer', (LDPSerializer,), {'Meta': meta_class}) def get_queryset(self, *args, **kwargs): if self.model: