From 53e53c834348caf6838dd02f48b6b6fdc45043ea Mon Sep 17 00:00:00 2001 From: Jean-Baptiste <bleme@pm.me> Date: Thu, 31 Jan 2019 18:06:18 +0100 Subject: [PATCH] wip --- djangoldp/serializers.py | 25 ++++++++++++++++++++++--- djangoldp/tests/runner.py | 1 + djangoldp/tests/tests.py | 2 +- djangoldp/tests/urls.py | 9 +++++++++ 4 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 djangoldp/tests/urls.py diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py index 1dc35154..9b572123 100644 --- a/djangoldp/serializers.py +++ b/djangoldp/serializers.py @@ -9,13 +9,16 @@ from rest_framework.serializers import HyperlinkedModelSerializer, ListSerialize from rest_framework.utils.field_mapping import get_nested_relation_kwargs from rest_framework.utils.serializer_helpers import ReturnDict +from djangoldp.tests.models import Skill + class LDListMixin: def to_internal_value(self, data): # data = json.loads(data) + data = data['ldp:contains'] if isinstance(data, dict): - data = [data] - return [self.child_relation.to_internal_value(item['@id']) for item in data] + data = [data] + return super().to_internal_value(data) def to_representation(self, value): return {'@id': self.id, 'ldp:contains': super().to_representation(value)} @@ -36,9 +39,11 @@ class ContainerSerializer(LDListMixin, ListSerializer): return ReturnDict(super(ListSerializer, self).data, serializer=self) def create(self, validated_data): + print(validated_data) return super().create(validated_data) + class ManyJsonLdRelatedField(LDListMixin, ManyRelatedField): pass @@ -119,10 +124,24 @@ class LDPSerializer(HyperlinkedModelSerializer): except AttributeError: fields = '__all__' - return NestedLDPSerializer, {"many": True} + def to_internal_value(self, data): + return [JsonLdRelatedField(view_name="skill-detail",queryset=Skill.objects.all()).to_internal_value(data)] + # super().to_internal_value(data)] + + + kwargs = get_nested_relation_kwargs(relation_info) + kwargs['read_only'] = False + return NestedLDPSerializer, kwargs + # return NestedLDPSerializer, {"many": True} + @classmethod def many_init(cls, *args, **kwargs): kwargs['child'] = cls() return ContainerSerializer(*args, **kwargs) + + + def create(self, validated_data): + super().create(validated_data) + diff --git a/djangoldp/tests/runner.py b/djangoldp/tests/runner.py index 7fb1b4ff..8e043144 100644 --- a/djangoldp/tests/runner.py +++ b/djangoldp/tests/runner.py @@ -8,6 +8,7 @@ settings.configure(DEBUG=True, 'ENGINE': 'django.db.backends.sqlite3', } }, + ROOT_URLCONF='djangoldp.tests.urls', INSTALLED_APPS=('django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', diff --git a/djangoldp/tests/tests.py b/djangoldp/tests/tests.py index a9217548..cc031014 100644 --- a/djangoldp/tests/tests.py +++ b/djangoldp/tests/tests.py @@ -18,7 +18,7 @@ class Serializer(TestCase): ]} } - meta_args = {'model': JobOffer, 'depth': 2, 'fields': ("title", "skills")} + meta_args = {'model': JobOffer, 'depth': 2, 'fields': ("@id", "title", "skills")} meta_class = type('Meta', (), meta_args) serializer_class = type(LDPSerializer)('JobOfferSerializer', (LDPSerializer,), {'Meta': meta_class}) diff --git a/djangoldp/tests/urls.py b/djangoldp/tests/urls.py new file mode 100644 index 00000000..5982784d --- /dev/null +++ b/djangoldp/tests/urls.py @@ -0,0 +1,9 @@ +from djangoldp.tests.models import Skill, JobOffer +from djangoldp.views import LDPViewSet +from django.conf.urls import url + + +urlpatterns = [ + url(r'^skills/', LDPViewSet.urls(model=Skill, permission_classes=[], fields=["@id", "title"], nested_fields=[])), + url(r'^job-offers/', LDPViewSet.urls(model=JobOffer, nested_fields=["skills"], permission_classes=())), +] \ No newline at end of file -- GitLab