【问题标题】:Django case insensitive in check against listDjango 不区分大小写检查列表
【发布时间】:2016-12-25 21:29:03
【问题描述】:

我的网站有一堆 Thread 对象

  >>> Thread.objects.filter(board__name='Fitness')
    [<Thread: lorem>, <Thread: lorems>, <Thread: LOREM>]

每个用户都有一个过滤器列表,(Postgresql Array Field)

>>> filters
['lorem', 'adipisci', 'amet', 'dolor']

我希望能够排除用户过滤器列表中的线程。到目前为止,这是我能够实现这一目标的唯一方法:

>>> Thread.objects.filter(board__name='Fitness').exclude(reduce(operator.or_, (Q(title__icontains=x) for x in filters)))
[]

我想知道是否有办法在 Django 中使用 in 运算符进行不区分大小写的检查。由于以下不起作用

>>> Thread.objects.filter(board__name='Fitness').exclude(title__in=filters)
[<Thread: lorems>, <Thread: LOREM>]

最好在 Django 中,而不必弄乱数据库本身

【问题讨论】:

标签: django python-3.x orm


【解决方案1】:

您可以尝试使用iregex,方式如下:

>>> Thread.objects.filter(board__name="Fitness") \
                  .exclude(title__iregex=r"(" + "|".join(filters) + ")$")
[<Thread: lorems>]

【讨论】:

    猜你喜欢
    • 2011-02-09
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多