From d3c4d19a7da37f1fa4d4da87cb7334d791c7267a Mon Sep 17 00:00:00 2001
From: Sylvain Le Bon <sylvain@happy-dev.fr>
Date: Wed, 28 Feb 2018 20:54:46 +0100
Subject: [PATCH] feature: representation of foreign keys as objects (fix #5)

---
 serializers.py | 26 ++++++++++++--------------
 1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/serializers.py b/serializers.py
index f1a79294..2080dfae 100644
--- a/serializers.py
+++ b/serializers.py
@@ -11,25 +11,23 @@ class ContainerSerializer(ListSerializer):
     def data(self):
         return ReturnDict(super(ListSerializer, self).data, serializer=self)
 
-class LDPSerializer(HyperlinkedModelSerializer):
-    url_field_name = "@id"
-    
-    def update_lookup_field(self, field):
+class JsonLdRelatedField(HyperlinkedRelatedField):
+    def __init__(self, view_name=None, **kwargs):
+        super().__init__(view_name, **kwargs)
         #get the field name associated with the url of the view
         try:
-            lookup_field = get_resolver().reverse_dict[field.view_name][0][0][1][0]
-            field.lookup_field = lookup_field
-            field.lookup_url_kwarg = lookup_field
+            lookup_field = get_resolver().reverse_dict[self.view_name][0][0][1][0]
+            self.lookup_field = lookup_field
+            self.lookup_url_kwarg = lookup_field
         except MultiValueDictKeyError:
             pass
+    def to_representation(self, value):
+        return {'@id': super().to_representation(value)}
+
+class LDPSerializer(HyperlinkedModelSerializer):
+    url_field_name = "@id"
+    serializer_related_field = JsonLdRelatedField
     
-    def __init__(self, *args, **kwargs):
-        super(LDPSerializer, self).__init__(*args, **kwargs)
-        for name, field in self.fields.items():
-            if isinstance(field, HyperlinkedRelatedField):
-                self.update_lookup_field(field)
-            elif isinstance(field, ManyRelatedField):
-                self.update_lookup_field(field.child_relation)
     def to_representation(self, obj):
         data = super().to_representation(obj)
         if hasattr(obj._meta, 'rdf_type'):
-- 
GitLab