django-filter声明可过滤字段时iexact不生效的原因咨询
问题原因解析
当你在OrganizationFilter的Meta.fields中使用字典配置:
fields = { 'city': ['iexact', 'contains'], 'zipcode': ['exact', 'contains'] }
这种方式会为city字段生成多个带后缀的过滤参数,而非覆盖默认的city字段过滤逻辑:
- 要触发不区分大小写的精确匹配,你需要使用
city__iexact作为查询参数(例如?city__iexact=Beijing) - 要触发包含匹配,则需要使用
city__contains参数
而当你显式定义:
city = filters.CharFilter(lookup_expr='iexact')
这是直接替换了默认的city过滤字段——CharFilter默认的lookup_expr是exact,显式定义后会把原本默认的精确匹配改成不区分大小写的精确匹配,所以此时直接传city参数(例如?city=beijing)就能生效。
总结来说:Meta.fields的字典配置是为字段添加多组带后缀的过滤选项,不会修改默认字段的行为;只有显式定义过滤器字段,才会覆盖该字段默认的查询逻辑。
内容的提问来源于stack exchange,提问作者dinesh-hills
相关产品推荐
相关产品推荐

