2012-03-12 122 views
12

所以我想找到任何匹配給出了一些領域,因此,例如,這是我想要做什麼:與__in查找Django的icontains

possible_merchants = ["amazon", "web", "services"] 
# Possible name --> "Amazon Service" 
Companies.objects.filter(name__icontains__in=possible_merchants) 

可惜這是不可能的混合icontains和__in查找。

這似乎是一個相當複雜的查詢,所以如果我至少可以忽略的情況下,這將是足夠的,例如名稱:

Companies.objects.filter(name__ignorecase__in=possible_merchants) 

任何想法?

PD:我張貼的查詢不工作,它只是一個表達我需要什麼(以防萬一嘿嘿)

+1

http://stackoverflow.com/questions/3923589/django-in-lowercase – 2012-03-12 21:04:45

回答

22

您可以創建查詢集with the Q constructor,並與|運營商結合他們得到他們結合的方式:

from django.db.models import Q 

def companies_matching(merchants): 
    """ 
    Return a queryset for companies whose names contain case-insensitive 
    matches for any of the `merchants`. 
    """ 
    q = Q() 
    for merchant in merchants: 
     q |= Q(name__icontains = merchant) 
    return Companies.objects.filter(q) 

(而同樣與iexact代替icontains

+1

WAO似乎是一個非常乾淨的AP proach,讓我試試吧 – Hassek 2012-03-12 21:18:45

+1

很好的答案,謝謝! – Hassek 2012-03-12 21:39:11

+5

如果任何人需要動態字段名稱,請使用'q | = Q(** {'%s__icontains'%field_name:merchant})' – 2014-02-27 02:02:30

相關問題