ListSerializer в Django Restful - Когда он называется? - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть следующий код для моего serializers.py:

from rest_framework import serializers

from django.db import transaction
from secdata_finder.models import File

class FileListSerializer(serializers.ListSerializer):
    @transaction.atomic
    def batch_save_files(file_data):
        files = [File(**data) for data in file_data]
        return File.objects.bulk_create(files)

    def create(self, validated_data):
        print("I am creating multiple rows!")
        return self.batch_save_files(validated_data)

class FileSerializer(serializers.ModelSerializer):
    class Meta:
        list_serializer_class = FileListSerializer
        model = File
        fields = (...) # omitted

Я экспериментирую с этим на моем тестовом наборе Django:

def test_file_post(self):
    request = self.factory.post('/path/file_query', {"many":False})
    request.data = {
        ... # omitted fields here
    }
    response = FileQuery.as_view()(request)

Он печатает I am creating multiple rows!, что не то, что должно произойти .

По документам :

... настроить создание или обновление поведения нескольких объектов. В этих случаях вы можете изменить класс, который используется при пропускании many = True, с помощью параметра list_serializer_class в мета-классе сериализатора.

Так чего я не понимаю? Я передал many:False в своем почтовом запросе, и все же он все еще делегирует функцию create FileListSerializer!

1 Ответ

0 голосов
/ 27 апреля 2018

По документам:

Класс ListSerializer обеспечивает поведение для сериализации и проверка нескольких объектов одновременно. Вам обычно не нужно использовать ListSerializer напрямую, но вместо этого он должен просто передать many = True, когда создание сериализатора

Вы можете добавить many=True в ваш сериализатор

class FileSerializer(serializers.ModelSerializer):

def __init__(self, *args, **kwargs):
    kwargs['many'] = kwargs.get('many', True)
    super().__init__(*args, **kwargs)

Потенциальное дублирование Как создать несколько экземпляров модели с Django Rest Framework?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...