From c1823ca67e72c7517147fadf42ff7842c46a6883 Mon Sep 17 00:00:00 2001 From: Sylvain Le Bon <sylvain@happy-dev.fr> Date: Wed, 28 Feb 2018 22:17:01 +0100 Subject: [PATCH] update: configurable fields (fix #6) --- serializers.py | 6 +++++- views.py | 10 ++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/serializers.py b/serializers.py index 2080dfae..0b081728 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 8aad72cb..f769e41c 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: -- GitLab