Django在检查列表时不区分大小写

时间:2016-08-18 20:22:07

标签: django python-3.x orm

我的网站有一堆Thread对象

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

每个用户都有一个过滤器列表,(Postgresql数组字段)

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

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

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

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

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

最好是从Django内部,而不必混淆数据库本身

1 个答案:

答案 0 :(得分:1)

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

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