2013-08-19 3 views
1

для создания некоторых запросов я использую этот код:AutoGenerate Джанго запрос с Q

query_words = ['word1', 'word2', 'word3', ...] 
query_array = [Q(text__icontains=w) for w in query_words] 
try: 
    query = query_array.pop() 
    for q in query_array: 
    query |= q #or query &= q 
    result = SomeModel.objects.filter(query) 
except: 
    result = SomeModel.objects.none() 

Я уверен, что есть способ, чтобы написать это более компактным. Как? Я пытался использовать функцию уменьшения:

... 
query = reduce(lambda res, q: res |= q, query_array, query_array.pop()) 
... 

Но я получил ошибку синтаксиса. Что случилось?

ответ

3

вы можете попробовать,

from operator import or_ 
query_words = ['word1', 'word2', 'word3', ...] 
query_array = [Q(text__icontains=w) for w in query_words] 
reduce(or_, query_array) 
+0

где or_ идет от как метода. можете ли вы дать некоторые рекомендации. – drabo2005

+0

@ abda2005 http://docs.python.org/2/library/operator.html –