From 8f407214338f183367d19c60ea5c976332e67c9f Mon Sep 17 00:00:00 2001
From: Sylvain Le Bon <sylvain@happy-dev.fr>
Date: Sun, 3 Jun 2018 20:28:16 +0200
Subject: [PATCH] bugfix: fixed error on related model when using a custom
 lookup field

---
 djangoldp/serializers.py | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py
index 8ccc6d3f..ef684a99 100644
--- a/djangoldp/serializers.py
+++ b/djangoldp/serializers.py
@@ -4,6 +4,7 @@ from django.utils.datastructures import MultiValueDictKeyError
 from rest_framework.relations import HyperlinkedRelatedField, ManyRelatedField
 from rest_framework.serializers import HyperlinkedModelSerializer, ListSerializer, CharField
 from rest_framework.utils.serializer_helpers import ReturnDict
+from rest_framework.utils.field_mapping import get_nested_relation_kwargs
 
 class ContainerSerializer(ListSerializer):
     def to_representation(self, data):
@@ -28,9 +29,19 @@ class JsonLdRelatedField(HyperlinkedRelatedField):
         except ImproperlyConfigured:
             return value.pk
 
+class JsonLdIdentityField(JsonLdRelatedField):
+    def __init__(self, view_name=None, **kwargs):
+        kwargs['read_only'] = True
+        kwargs['source'] = '*'
+        super(JsonLdIdentityField, self).__init__(view_name, **kwargs)
+
+    def use_pk_only_optimization(self):
+        return False
+
 class LDPSerializer(HyperlinkedModelSerializer):
     url_field_name = "@id"
     serializer_related_field = JsonLdRelatedField
+    serializer_url_field = JsonLdIdentityField
     
     def get_default_field_names(self, declared_fields, model_info):
         return super().get_default_field_names(declared_fields, model_info) + list(getattr(self.Meta, 'extra_fields', []))
@@ -41,6 +52,16 @@ class LDPSerializer(HyperlinkedModelSerializer):
             data['@type'] = obj._meta.rdf_type
         return data
     
+    def build_nested_field(self, field_name, relation_info, nested_depth):
+        print(nested_depth)
+        class NestedSerializer(self.__class__):
+            class Meta:
+                model = relation_info.related_model
+                depth = nested_depth - 1
+                fields = '__all__'
+        
+        return NestedSerializer, get_nested_relation_kwargs(relation_info)
+    
     @classmethod
     def many_init(cls, *args, **kwargs):
         kwargs['child'] = cls()
-- 
GitLab