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

如何在Django中通过内省获取合法的Field Lookups列表?

获取Django Field合法Lookups的程序化方案

Django没有提供类似Model._meta.get_fields()的直接内省方法来一次性获取所有通用Field Lookups,但可以通过以下两种可靠方式实现需求:

1. 从字段实例获取支持的Lookups

每个Django字段实例都自带get_lookups()方法,会返回该字段支持的所有lookup名称与对应类的映射。你可以针对单个字段或遍历所有字段收集信息:

from myapp.models import Issue

# 获取单个字段的支持lookups
title_field = Issue._meta.get_field("title")
title_supported_lookups = list(title_field.get_lookups().keys())
# 输出示例:['exact', 'iexact', 'contains', 'icontains', 'startswith', 'istartswith', ...]

# 遍历模型所有字段,收集所有去重后的lookups
all_lookups = set()
for field in Issue._meta.get_fields():
    if hasattr(field, 'get_lookups'):
        all_lookups.update(field.get_lookups().keys())
all_lookups = sorted(all_lookups)

2. 直接访问Django的默认Lookup注册

Django的基类Field维护了所有通用lookups的注册信息,可通过私有属性_default_lookups直接获取(当前Django 3.x/4.x/5.x版本稳定可用):

from django.db.models.fields import Field

# 获取所有通用Field Lookups
default_general_lookups = list(Field._default_lookups.keys())
# 输出示例:['exact', 'iexact', 'contains', 'icontains', 'gt', 'gte', 'lt', 'lte', 'in', 'range', ...]

额外建议

  • 若需区分字段类型的专属lookups(比如日期字段的year/month、数字字段的mod),可以按字段类型分组收集,前端展示时对应字段只显示其支持的lookups,避免无效查询。
  • 保存筛选条件到JSONField时,要严格遵循Django filter的格式要求:比如in对应数组值、range对应双元素数组,前端传递时需做格式校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:33:22