2016-08-18 15 views
0

檢查不敏感的我的網站有大量線程的對象Django的情況下,對列表

>>> 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))) 
[] 

,如果有一種方法可以做到不區分大小寫的檢查,在Django與在運營商。由於下面不起作用

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

最好,並沒有亂用數據庫本身

+0

可能的複製[Django查詢不區分大小寫的列表匹配](http://stackoverflow.com/questions/2667524/django-query-case-insensitive-list-match) – solarissmoke

回答

1

您可以嘗試使用iregex,以下列方式:

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