Package: nescs
NESTED SERIALIZER CREATE SERVICEInstallationУстановка через PyPi:pip install nescsDescriptionДанная библиотека позволяет автоматически создавать объекты во
вложенных сериализаторах.
Работу по созданию вложенных объектов берет на себя сервис -SerializerCreateService.
Он поддерживает создание объектов в случаяхMany to manyOne to oneForeign keyExamplesНиже расположено несколько примеров использования библиотеки на
различных вариантах связи между моделямиMany to many caseДля создание объектов с отношениемm2mиспользуется методcreate_m2m_instancesПример кода для случаяm2m:class PublicationSerializer(serializers.ModelSerializer):
    class Meta:
        model = Publication
        fields = (
            'id',
            'title',
        )


class ArticleSerializer(serializers.ModelSerializer):
    publications = PublicationSerializer(
        many=True
    )

    class Meta:
        model = Article
        fields = (
            'id',
            'headline',
            'publications',
        )

    def create(self, validated_data):
        service = SerializerCreateService(self, validated_data, m2m_fields=['publications'])
        current_instance = super().create(validated_data)

        service.create_m2m_instances(
            parent_instance=current_instance
        )
        return current_instanceOne to one caseДля создание объектов с отношениемo2oиспользуется методcreate_child_instancesПример кода для случаяo2o:class RestaurantDirectorSerializer(serializers.ModelSerializer):
    class Meta:
        model = RestaurantDirector
        fields = (
            'id',
            'name',
        )

class RestaurantSerializer(serializers.ModelSerializer):
    director = RestaurantDirectorSerializer(
        required=True
    )

    class Meta:
        model = Restaurant
        fields = (
            'id',
            'serves_hot_dogs',
            'serves_pizza',
            'director',
        )

    def create(self, validated_data):
        service = SerializerCreateService(
            self,
            validated_data,
            child_fields=['director']
        )
        restaurant = super().create(validated_data)

        service.create_child_instances(restaurant)
        return restaurantForeign key caseДля создание объектов с отношениемfkиспользуется методcreate_fk_instancesПример кода для случаяfk:class ReporterSerializer(serializers.ModelSerializer):
    class Meta:
        model = Reporter
        fields = (
            'id',
            'first_name',
            'last_name',
        )

class NewsSerializer(serializers.ModelSerializer):
    reporter = ReporterSerializer(
        required=True
    )

    class Meta:
        model = News
        fields = (
            'id',
            'headline',
            'reporter'
        )

    def create(self, validated_data):
        service = SerializerCreateService(self, validated_data, fk_fields=['reporter'])
        service.create_fk_instances()
        return super().create(validated_data)FeatureПолезные фичиПриинициализациисервиса, он автоматически удаляет изvalidated_dataполя указанные вm2m_fieldsиchild_fieldsПоэтому вам ненужно вручную очищатьvalidated_dataот вложенных объектов для создания родительского объекта. Просто вызовите создание родительского объекта после инициализации сервиса. (Полезно дляo2oиm2m)После вызова одного из методов создания вложенных объектов, вvalidated_dataбудут помещены экземпляры созданных объектов