Django __小写

Posted

技术标签:

【中文标题】Django __小写【英文标题】:Django __in lowercase 【发布时间】:2011-04-24 19:51:52 【问题描述】:

我正在使用django-taggit,它处理将标签附加到任意内容类型。 我导入了一个大标签列表,其中包含许多大写单词和小写单词。

现在,我试图获取包含一组标签的另一个类的对象,但我想不区分大小写进行比较。当我这样做时:

Media.objects.filter(tags__name__in=['tag1', 'tag2'])

对象包含例如没有找到标签“Tag1”,只有那些带有“tag1”或“tag2”的标签。

django orm 中是否有可能执行以下操作:

Media.objects.filter(tags__name__iin=['tag1', 'tag2'])

这就像“图标”?

【问题讨论】:

听起来你最好的选择是旋转标签并将它们全部转换为小写。 嗯 - 是的,这是可能的,但不能解决一般问题。 【参考方案1】:

没有简单的方法可以做到这一点。我不是 100% 确定,您可以尝试这样的方法来解决您的问题。

from django.models import Q

q = Q()
for tag in tags.split():
    q |= Q(tags__name__iexact=tag)

Media.objects.filter(q)

【讨论】:

因为你使用的是完全匹配,所以你不需要使用 .lower() docs.djangoproject.com/en/1.2/ref/models/querysets/#iexact 这行得通,谢谢。但是,我会很感激 Django ORM 中的 __iin-operator。

以上是关于Django __小写的主要内容,如果未能解决你的问题,请参考以下文章

django-orm 不区分大小写的顺序

Django学习ORM

Django数据查询方法总结

Django 查询filter 常见查询方法

Django 各种条件查询关键字

Django 查询集的过滤内置条件