class BookListSerializer(serializers.ListSerializer):
def save(self, **kwargs):
# The super breaks because of incomplete instantiating.
# Also kwargs is empty.
# There is only one child here and not a list to be found.
# In (pseudo) code it would look something like this, but there is no instance:
for book in self.validated_data:
if book.instance:
self.child.update(book)
else:
self.child.create(book)
return my_list
class BookSerializer(serializers.ModelSerializer):
# Some fields.
class Meta:
model = Book
list_serializer_class = BookListSerializer
class WritableNestedSerializer(serializers.ModelSerializer):
# This is my implementation for nested writes.
def update(self, instance, validated_data):
# Here I need to do logic for the saving of books.
# I want to reuse the instances filled in already, like with a foreign key, which get fetched based on the id field in their validated_data.
# Otherwise I need to do a query for every id in the validated_data of this serializer, whilst it already has been done.
for field in validated_data:
if field == relational: # Simplified if check.
data = validated_data.pop(field)
instance_list = self.fields[field].save(data) # This calls the save of my custom list serializer.
return super(WritableNestedSerializer, self).update(**kwargs)
class AuthorSerializer(WritableNestedSerializer):
# Example author serializer with a relation to books.
books = BookSerializer(many=True)