Skip to main content

Библиотека создания моделей вложенных сериализаторов

Project description

NESTED SERIALIZER CREATE SERVICE

Installation

Установка через PyPi:

pip install nescs

Description

Данная библиотека позволяет автоматически создавать объекты во вложенных сериализаторах. Работу по созданию вложенных объектов берет на себя сервис - SerializerCreateService. Он поддерживает создание объектов в случаях

  1. Many to many

  2. One to one

  3. Foreign key

Examples

Ниже расположено несколько примеров использования библиотеки на различных вариантах связи между моделями

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_instance

One 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 restaurant

Foreign 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 будут помещены экземпляры созданных объектов

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nescs-0.3.5.tar.gz (4.0 kB view hashes)

Uploaded Source

Built Distribution

nescs-0.3.5-py3-none-any.whl (4.1 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page