You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:31:51