python - 创建多个对象时,DRF 模型序列化程序是否保留列表中的顺序?
问题描述
我想用来ModelSerializer
创建多个对象。
如果我有一个对象的数据列表,
data = [{object_1_data},{object_2_data},...]
当我使用模型序列化程序创建对象时,
serializer = serializer(data=data, many=true)
if serializer.is_valid():
objects = serializer.save()
返回objects
列表是否包含与之前相同顺序的对象?
objects = [object_1, object_2, ...]
解决方案
是的。
示例(如果需要 on):序列化程序必须保持对象顺序,以便 DRF 保持其视图集中结果的顺序。顺序取自原始查询集/列表顺序。取list()
DRF ListModelMixin的方法:
class ListModelMixin:
"""
List a queryset.
"""
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
(排序是在查询集中完成的,而不是在序列化器的结果数据上)
推荐阅读
- git - 如何找到我正在处理的 Git 文件
- scala - 用 Vector 类型参数覆盖 java 方法
- python - 运行 python 代码给出 NameError: name 'ABCMeta' is not defined 每次
- go - 有没有办法将案例动态添加到 golang 类型开关?
- reactjs - 何时使用 useCallback、useMemo 和 useEffect?
- javascript - 将几个对应信息的数组转换为类和子类的树状结构
- python - 如何使用 python 请求进行多个 api 调用
- python - 查找时间范围内的最高和最低值
- javascript - 我如何使用 javascript 库从打印机扫描仪获取图像
- ms-access - 数据库中有空表有什么影响?