From 9e98986d25d139f479506d00ba255082602660ff Mon Sep 17 00:00:00 2001
From: Jean-Baptiste <bleme@pm.me>
Date: Tue, 12 Feb 2019 13:05:06 +0100
Subject: [PATCH] update: allow nested object creation on POST

---
 djangoldp/serializers.py | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py
index 96f2c82e..ab70d648 100644
--- a/djangoldp/serializers.py
+++ b/djangoldp/serializers.py
@@ -234,14 +234,11 @@ class LDPSerializer(HyperlinkedModelSerializer):
         for field_name in nested_fields_name:
             nested_fields.append((field_name, validated_data.pop(field_name)))
 
-        obj = model.objects.create(**validated_data)
+        instance = model.objects.create(**validated_data)
 
-        for (field_name, data) in nested_fields:
-            for item in data:
-                item.save()
-                getattr(obj, field_name).add(item)
+        self.save_or_update_nested(instance, nested_fields)
 
-        return obj
+        return instance
 
     def update(self, instance, validated_data):
         nested_fields = []
@@ -253,6 +250,11 @@ class LDPSerializer(HyperlinkedModelSerializer):
             setattr(instance, attr, value)
         instance.save()
 
+        self.save_or_update_nested(instance, nested_fields)
+
+        return instance
+
+    def save_or_update_nested(self, instance, nested_fields):
         for (field_name, data) in nested_fields:
             try:
                 getattr(instance, field_name).clear()
@@ -267,5 +269,3 @@ class LDPSerializer(HyperlinkedModelSerializer):
                     savedItem = self.internal_create(validated_data=item, model=manager.model)
 
                 getattr(instance, field_name).add(savedItem)
-
-        return instance
-- 
GitLab