You need to enable JavaScript to run this app. 如何在Django REST Framework中定义searchFilter的查询URL路径
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django REST Framework中定义searchFilter的查询URL路径

Django DRF 过滤接口404问题修复方案

你出现404的核心原因是:Django 的URL路由规则仅匹配URL中?之前的路径部分,?之后的查询参数不需要写入path()的路由定义中,你将查询参数的规则硬编码到路由路径里,导致路径匹配失败。

  • 第一步:修正URL配置
    直接删除路由中查询参数相关的定义,仅保留基础路径即可:
# urls.py 修正后代码
path("api/search-products/", SearchProduct.as_view())

小提示:注意你的示例请求路径是/api/search-products/(复数),路由配置时要和请求的路径拼写完全一致,避免因为单复数问题再次出现404。

  • 第二步:调整视图过滤配置
    你当前使用的SearchFilter是DRF自带的全局模糊搜索组件,仅支持?search=关键词的统一传参方式,无法实现?category=xxx&name=xxx的独立字段过滤。你已经安装了django-filter,直接替换过滤后端即可:
# views.py 修正后代码
from django_filters.rest_framework import DjangoFilterBackend

class SearchProduct(generics.ListAPIView):
    serializer_class = ProductSerializer
    # 替换为DjangoFilterBackend实现独立字段过滤
    filter_backends = [DjangoFilterBackend]
    # 声明允许过滤的字段,框架会自动生成对应参数的过滤逻辑
    filterset_fields = ["category", "name"]

如果你同时需要保留全局模糊搜索能力,可以同时保留两个过滤后端:

filter_backends = [DjangoFilterBackend, filters.SearchFilter]
filterset_fields = ["category", "name"]
search_fields = ["category", "name"]

配置后即可同时支持两种查询方式:

  1. 独立字段过滤:http://localhost:8000/api/search-products/?category=oil&name=mustard oil
  2. 全局模糊搜索:http://localhost:8000/api/search-products/?search=oil
  • 第三步:接口验证
    修改完成后直接访问目标格式的URL即可正常返回结果,不需要额外配置其他内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 02:42:02