Для экономии HTTP-запросов может быть удобно отправлять вместе с запросом сопутствующие документы.
‒ JSON API specification for Ember Data.
Вложенные сериализаторы с возможностью записи¶
Хотя плоские структуры данных служат для правильного разграничения отдельных сущностей в вашем сервисе, бывают случаи, когда более целесообразно или удобно использовать вложенные структуры данных.
С вложенными структурами данных достаточно легко работать, если они доступны только для чтения - просто вложите классы сериализаторов, и все готово. Однако при использовании вложенных сериализаторов с возможностью записи есть еще несколько тонкостей, связанных с зависимостями между различными экземплярами модели и необходимостью сохранения или удаления нескольких экземпляров одним действием.
Структуры данных «один ко многим¶
Пример вложенного сериализатора **только для чтения*. Здесь нет ничего сложного.*
class ToDoItemSerializer(serializers.ModelSerializer):
class Meta:
model = ToDoItem
fields = ['text', 'is_completed']
class ToDoListSerializer(serializers.ModelSerializer):
items = ToDoItemSerializer(many=True, read_only=True)
class Meta:
model = ToDoList
fields = ['title', 'items']
Некоторые примеры вывода нашего сериализатора.
{
'title': 'Leaving party preparations',
'items': [
{'text': 'Compile playlist', 'is_completed': True},
{'text': 'Send invites', 'is_completed': False},
{'text': 'Clean house', 'is_completed': False}
]
}
Давайте рассмотрим обновление нашей вложенной структуры данных «один ко многим».