DRF如何使用同一个Serializer返回多条序列化数据
首先你写的期望返回格式存在JSON语法错误,合法的JSON结构中faults字段应该对应一个包含多个对象的数组,而非直接在对象内罗列多个无键对象,正确的合法目标结构如下:
{ "faults": [ { "date":"2021-07-02", ... }, { "date":"2021-06-28", ... }, { "date":"2021-05-02", ... } ] }
以下是两种实现方案:
方案1:修正原有循环逻辑
初始化空列表存储每次序列化的结果,循环时追加数据即可,同时修正了你原有代码中status参数放错位置的问题:
dates = ["2021-05-02", "2021-06-28", "2021-07-02"] faults_list = [] for date in dates: serializer = DatesSerializer({ "date": date, ... # 其他字段赋值逻辑保持不变 }) faults_list.append(serializer.data) return Response({"faults": faults_list}, status=200)
方案2:更推荐的DRF原生批量序列化写法
无需手动循环,直接构造数据列表后传入序列化器,指定many=True即可批量处理,代码更简洁性能更优:
dates = ["2021-05-02", "2021-06-28", "2021-07-02"] # 构造所有待序列化数据的列表 data_list = [{"date": date, ...} for date in dates] # many=True 开启批量序列化 serializer = DatesSerializer(data_list, many=True) return Response({"faults": serializer.data}, status=200)
内容的提问来源于stack exchange,提问作者Raul Quinzani
相关产品推荐
相关产品推荐

