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

Django DRF POST方法用objects.filter按分类名过滤数据报错如何解决

问题解决方法

你的报错根因是Django ORM对外键字段的查询规则问题:当你直接对外键字段category做等值过滤时,Django默认匹配的是关联Category表的主键id,你传入分类名字符串自然会触发类型不匹配错误。

修复步骤

  1. 调整ORM查询逻辑,使用Django跨表查询语法__(双下划线)关联外键表的字段做过滤
  2. 修正视图最后返回时的变量名笔误(你代码里写的大写Serializer.data是引用类,应该用你实例化的小写serializer对象的data属性)
  3. 可选增加分类不存在的异常处理,避免接口直接500

修正后的视图代码

class DisplayCategoryViseViewSet(APIView):
    serializer_class = PhotoSerializer

    def post(self, request, format=None):
        data = request.data
        try:
            category_name = data['category']['name']
        except KeyError:
            return Response({"error": "请求参数格式错误,缺少category.name字段"}, status=400)
        # 先判断分类是否存在,避免无效查询
        if not Category.objects.filter(name=category_name).exists():
            return Response({"error": f"分类{category_name}不存在"}, status=404)
        # 用双下划线跨外键查询关联表的name字段
        queryset = Photo.objects.filter(category__name=category_name)
        serializer = PhotoSerializer(queryset, many=True)
        return Response(serializer.data)

修改完成后重新发起POST请求,即可返回对应分类下的照片数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:39:02