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

Django REST Framework自定义过滤FilterSet两种写法区别及查找符含义

两种FilterSet声明方式的核心差异

两种写法的本质区别是支持的过滤查询维度不同:

  • 第一种列表写法fields = ['username', 'last_login']:是django-filter的简化声明方式,仅为每个指定字段开放*exact(精确匹配)*这一种查询规则,你只能通过?username=张三、?last_login=2023-10-01这种完全匹配的参数过滤数据,不支持其他模糊、范围查询。
  • 第二种字典写法fields = {字段名: [查询规则列表]}:是自定义规则的声明方式,可以针对每个字段单独指定开放的查询规则,灵活性更高。示例里的写法就为username开放了精确匹配、包含匹配两种规则,为last_login开放了精确匹配、年份大于指定值两种规则,前端可以根据需要选择对应规则传参过滤。
两个查询表达式的具体含义

这两个都是Django ORM原生支持的字段查询表达式,django-filter直接复用了这套规则:

  • contains:模糊包含匹配,对应SQL语法中的LIKE %参数值%,会筛选出字段值包含传入参数的所有记录。比如传参?username__contains=张,就能返回所有用户名带“张”字的用户。
    补充:如果需要不区分大小写的包含匹配,可以替换为icontains规则。
  • year__gt:日期字段的范围查询组合规则,其中year是提取日期字段的年份值,gt是「大于(greater than)」的缩写,组合后含义为筛选该日期字段年份大于传入参数的记录。比如传参?last_login__year__gt=2022,就能返回所有2023年及之后登录过的用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:36:04