我有以下代码在我的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!
, 这显然不是预期的结果。
根据文档:
... 定制多个对象的 create 或 update 行为。 对于这些情况,您可以通过在序列化器 Meta 类上使用 list_serializer_class 选项来修改在 many=True 时使用的类。
那么我理解错了什么吗?我在我的post请求中传递了 many:False
,但是它仍将 create
函数委托给了 FileListSerializer
!
{"many": False}
对序列化器没有任何意义。在API视图中实例化序列化器时,您是否传递了关键字参数many=False
?您应该在此处添加视图代码。 - slider