Django Rest Serializer返回空结果问题求助
@api_view(['GET'])
@permission_classes((permissions.AllowAny,))
def get_all_workers(request):
data = Workers.objects.using('rh').all().order_by('emp_cod')
print(data.count()) # Returns 49086
serializer = WorkersSerializer(data)
print(serializer.data) # Returns {}
json = JSONRenderer().render(serializer.data)
return Response(json) # Returns Django Rest standard page with "{}" data
--- # 解决方案 嗨,这个问题我之前踩过坑!核心原因是你在序列化**多个对象的查询集**时,没告诉DRF序列化器要处理批量数据。 ### 为什么会返回空结果? `Workers.objects.using('rh').all()`返回的是一个`QuerySet`(包含49086条记录的集合),而默认情况下`ModelSerializer`是为序列化**单个对象**设计的。如果直接把查询集传给序列化器却不指定`many=True`,序列化器会尝试把整个查询集当作单个对象解析,自然无法识别有效字段,最终返回空字典`{}`。 ### 修复后的代码 只需要在初始化序列化器时添加`many=True`参数就行,另外还有个小优化:DRF的`Response`会自动处理序列化数据的渲染,不需要手动调用`JSONRenderer`。修改后的`views.py`代码如下: ```python ... @api_view(['GET']) @permission_classes((permissions.AllowAny,)) def get_all_workers(request): data = Workers.objects.using('rh').all().order_by('emp_cod') print(data.count()) # Returns 49086 # 关键:添加many=True,告诉序列化器处理多个对象 serializer = WorkersSerializer(data, many=True) print(serializer.data) # 现在会返回包含所有记录的列表 # 直接返回serializer.data即可,DRF会自动处理内容协商和渲染 return Response(serializer.data)
验证效果
修改后再运行代码,print(serializer.data)会输出一个包含49086条记录的列表,接口也会返回正确的批量数据了。
内容的提问来源于stack exchange,提问作者William Zimmermann
相关产品推荐
相关产品推荐

