From 9d1a1d887acdaef0ca301a84206e903902bd2e5c Mon Sep 17 00:00:00 2001
From: Thibaud Duquennoy <thibaud@duquennoy.fr>
Date: Thu, 7 Feb 2019 10:10:39 +0100
Subject: [PATCH] Bug Fixes: Url ID field

Fix bugs: URLField represents ids of resources
---
 djangoldp/models.py      | 7 +++++++
 djangoldp/serializers.py | 8 ++++++++
 djangoldp/tests/tests.py | 1 +
 3 files changed, 16 insertions(+)

diff --git a/djangoldp/models.py b/djangoldp/models.py
index 0bef4dcf..6e02705c 100644
--- a/djangoldp/models.py
+++ b/djangoldp/models.py
@@ -1,6 +1,7 @@
 from django.conf import settings
 from django.db import models
 from django.urls import get_resolver
+from rest_framework import fields
 
 
 class Model(models.Model):
@@ -70,6 +71,12 @@ class Model(models.Model):
         return path
 
 
+class LDPUrlField (fields.URLField):
+    def to_representation(self, value):
+        str = super(LDPUrlField, self).to_representation(value)
+        return {'@id': str}
+
+
 class LDPSource(models.Model):
     container = models.URLField()
     federation = models.CharField(max_length=255)
diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py
index f6318c28..8f68daec 100644
--- a/djangoldp/serializers.py
+++ b/djangoldp/serializers.py
@@ -18,6 +18,12 @@ from rest_framework.utils.serializer_helpers import ReturnDict
 
 from djangoldp.models import Model
 
+from rest_framework.serializers import HyperlinkedModelSerializer, ListSerializer, ModelSerializer
+from rest_framework.utils.field_mapping import get_nested_relation_kwargs
+from rest_framework.utils.serializer_helpers import ReturnDict
+
+from django.db import models as django_models
+from djangoldp import models
 
 class LDListMixin:
     def to_internal_value(self, data):
@@ -163,6 +169,8 @@ class LDPSerializer(HyperlinkedModelSerializer):
     url_field_name = "@id"
     serializer_related_field = JsonLdRelatedField
     serializer_url_field = JsonLdIdentityField
+    ModelSerializer.serializer_field_mapping [django_models.URLField] = models.LDPUrlField
+
 
     @property
     def data(self):
diff --git a/djangoldp/tests/tests.py b/djangoldp/tests/tests.py
index 53644644..4f47388e 100644
--- a/djangoldp/tests/tests.py
+++ b/djangoldp/tests/tests.py
@@ -36,6 +36,7 @@ class TestUserPermissions (TestCase):
         response = my_view(request)
         self.assertEqual(response.status_code, 201)
 
+
 class TestAnonymousUserPermissions (TestCase):
     def setUp(self):
         self.factory = RequestFactory()
-- 
GitLab