У меня есть следующий код для моего 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
!