Django REST 框架保存()

Django REST framework save()

使用关键字参数反序列化数据时many=True

serialized = MySerializer(data=request.data, many=True)

然后调用.save(),不知是在进行一次数据库操作,还是只是迭代子数据列表,分别进行create()update()

这是我一直推荐的地方 looking at the code itself,因为它总是会提供最新的答案。当前 ListSerializer 的默认 create 代码是

def create(self, validated_data):
    return [
        self.child.create(attrs) for attrs in validated_data
    ]

答案是它会为每个对象手动调用create,这意味着它不是在执行批量插入。部分原因是 Django REST Framework 并非设计用于高效处理 处理大量数据,但显示数据除外。它也默认 does not support bulk updates


您可以在 the default bulk creation in the documentation, as well as help on creating your own bulk update methods as well 上找到更多信息。这将要求您使用自己的 createupdate 方法创建自己的自定义 ListSerializer 来执行您正在寻找的操作。请记住,ListSerializer 是 Django REST Framework 在内部包装您的 many=True 序列化程序的内容,您可以通过调用 repr(serializer) 查看,其中 serializer 是您已初始化的序列化程序many=True.


过去,批量更新由第三方包处理 called Django REST Framework Bulk. While the package works with DRF 2.x, it is in the process of being updated for 3.0。目前正在审查添加 3.0 支持的拉取请求,因此我希望很快会有一个添加支持的新版本。

根据文档,它将为集合中的每个对象调用一次,但您可以覆盖此行为:

http://www.django-rest-framework.org/api-guide/serializers/#customizing-multiple-create