gpt4 book ai didi

python - Django Restful 中的 ListSerializer - 何时调用?

转载 作者:太空宇宙 更新时间:2023-11-04 02:27:22 26 4
gpt4 key购买 nike

我的 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!,这是不应该发生的事情

根据 docs :

... customize the create or update behavior of multiple objects. For these cases you can modify the class that is used when many=True is passed, by using the list_serializer_class option on the serializer Meta class.

所以我不明白什么?我在发布请求中传入了 many:False,但它仍然将 create 函数委托(delegate)给 FileListSerializer!

最佳答案

根据文档:

The ListSerializer class provides the behavior for serializing and validating multiple objects at once. You won't typically need to use ListSerializer directly, but should instead simply pass many=True when instantiating a serializer

您可以将 many=True 添加到您的序列化程序

class FileSerializer(serializers.ModelSerializer):

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

How do I create multiple model instances with Django Rest Framework? 的潜在骗局

关于python - Django Restful 中的 ListSerializer - 何时调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50053228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com