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

Django使用django-taggit如何忽略大小写查询匹配标签对应的对象

实现方案

你可以通过以下两种通用方式实现忽略大小写的标签匹配,无需依赖数据库的排序规则配置:

方案1:用Q对象拼接大小写不敏感匹配条件(兼容性最好)

直接使用Django内置的__iexact查询谓词实现单标签的大小写不敏感匹配,批量拼接后即可支持多标签查询:

from django.db.models import Q

def home(request):
    search_tags = ['harry-potter', 'Champak', 'Physics']
    # 构造查询条件:匹配任意一个目标标签的大小写变体
    query = Q()
    for tag in search_tags:
        query |= Q(tags__name__iexact=tag)
    # distinct用于去重,避免多对多查询返回重复书籍记录
    books = Book.objects.filter(query).distinct()
    print(books)
    return HttpResponse("Books Retrieved")

方案2:统一将数据库标签转为小写后匹配(代码更简洁)

通过Django内置的Lower函数将数据库存储的标签名统一转为小写,再和你预处理为小写的查询标签列表匹配:

from django.db.models.functions import Lower

def home(request):
    search_tags = ['harry-potter', 'Champak', 'Physics']
    # 将查询标签统一转为小写
    lower_search_tags = [tag.lower() for tag in search_tags]
    # 先把数据库中标签名转小写,再匹配目标列表,distinct去重
    books = Book.objects.annotate(
        lower_tag_name=Lower('tags__name')
    ).filter(
        lower_tag_name__in=lower_search_tags
    ).distinct()
    print(books)
    return HttpResponse("Books Retrieved")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:36:03