Библиотека создания моделей вложенных сериализаторов
Project description
NESTED SERIALIZER CREATE SERVICE
Installation
Установка через PyPi:
pip install nescs
Description
Данная библиотека позволяет автоматически создавать объекты во вложенных сериализаторах. Работу по созданию вложенных объектов берет на себя сервис - SerializerCreateService. Он поддерживает создание объектов в случаях
Many to many
One to one
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.