【问题标题】:How to use case insensitive in operation in django orm?如何在 django orm 中使用不区分大小写的操作?
【发布时间】:2019-06-22 08:49:22
【问题描述】:
User.objects.filter(name__in=["A", "AB", "a", "ab", "Ab"])

这是在Django 中使用in 字段查找的示例。

但我想知道这里有使用in 作为不区分大小写的任何技巧吗,比如icontains

谢谢

【问题讨论】:

    标签: django orm lookup


    【解决方案1】:

    其他人的回答都很好。

    我寻找了另一种使用Lower function的方式

    lower_list = map(lambda x:x.lower(), ["A", "AB", "a", "ab", "Ab"])
    User.objects.annotate(name_lower=Lower('name').filter(name_lower__in=lower_list)
    

    这只是另一种方式。我认为其他人的答案接近于一个好的答案。

    【讨论】:

      【解决方案2】:

      对于不区分大小写的操作,您可以使用iregex

      User.objects.filter(name__iregex=r'(A|AB|a|ab|Ab)')
      

      参考:https://docs.djangoproject.com/en/dev/ref/models/querysets/#iregex

      更新: 您可以进行自己的查找。从https://docs.djangoproject.com/en/dev/ref/models/lookups/获得帮助

      【讨论】:

        【解决方案3】:

        根据Django query case-insensitive list match,除了iregex查找之外没有其他解决方案

        【讨论】:

          猜你喜欢
          • 2011-03-25
          • 2021-08-29
          • 1970-01-01
          • 1970-01-01
          • 2010-12-20
          • 1970-01-01
          • 2011-10-14
          • 2023-03-05
          相关资源
          最近更新 更多