Django DRF POST方法用objects.filter按分类名过滤数据报错如何解决
问题解决方法
你的报错根因是Django ORM对外键字段的查询规则问题:当你直接对外键字段category做等值过滤时,Django默认匹配的是关联Category表的主键id,你传入分类名字符串自然会触发类型不匹配错误。
修复步骤
- 调整ORM查询逻辑,使用Django跨表查询语法
__(双下划线)关联外键表的字段做过滤 - 修正视图最后返回时的变量名笔误(你代码里写的大写
Serializer.data是引用类,应该用你实例化的小写serializer对象的data属性) - 可选增加分类不存在的异常处理,避免接口直接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
相关产品推荐
相关产品推荐

