diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py index 96f2c82ec2b43821f2e9859dbf9217db3bfae25a..ab70d6485d16213d9ed7fb4a440ea1a5720fe3a4 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