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

Django REST Framework接口返回无数据 此前曾触发断言错误

问题根因

代码的核心错误是混淆了DRF序列化器两种场景的传参规则:

  • 序列化(从数据库实例/查询集转成可返回的字典,对应GET读场景):第一个位置参数为instance,传入要序列化的数据源
  • 反序列化(从前端提交的数据校验后写入数据库,对应POST/PUT写场景):才需要传入data参数接收提交内容

你当前是查询数据返回的读场景,却把查询集传给了data参数,此时调用is_valid()必然校验不通过,变量data始终为初始的None,所以接口返回无数据。此前的断言错误也大概率是序列化场景错误调用is_valid()导致的。

修复方案

1. 修正视图传参逻辑

序列化场景不需要传data参数,也不需要调用is_valid()做校验,直接读取序列化后的data属性即可:

@api_view(['GET'])
def get_data(request):
    query_set = Organisation.objects.all()
    # 序列化操作传入instance参数
    serialized_data = OrganisationSerializer(instance=query_set, many=True)
    return Response(serialized_data.data, status=status.HTTP_200_OK)

2. 序列化器可选优化(避免后续写接口踩坑)

如果嵌套字段仅作为读属性返回,不需要前端提交,建议加上read_only=True,避免反序列化场景要求必须传入嵌套字段值:

class OrganisationSerializer(ModelSerializer):
    products = ProductSerializer(many=True, read_only=True)   #manytomany field
    pictures = PicturesSerializer(source ='pictures_set',many=True, read_only=True)  #foreign key field
    class Meta:
        model = Organisation
        fields = ['name','address' ,'products','pictures']

内容的提问来源于stack exchange,提问作者Atif Shafi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:18:03