我的网站有一堆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内部,而不必混淆数据库本身
答案 0 :(得分:1)
您可以尝试使用iregex,方法如下:
>>> Thread.objects.filter(board__name="Fitness") \
.exclude(title__iregex=r"(" + "|".join(filters) + ")$")
[<Thread: lorems>]