2017-05-31 48 views
0

我有例如以下列表:從列表中進行查詢與不同價值觀

list1 = ['blue', 'red'] 
list2 = ['green', 'yellow', 'black'] 

我怎麼能創建一個查詢(使用PostgreSQL)在搜索所有值。

這將工作正常,但它只有兩個值硬編碼,因此不處理列表中不同數量的值。

entry.objects.annotate(search=SearchVector('colors')).filter(search=SearchQuery('blue') | SearchQuery('red')) 

我嘗試以下,以創建「SEARCH_QUERY」的字符串,並將其放置在我的查詢:

for c in color: 
    search_string += "SearchQuery('" + c +"') | " 

search_string = search_string[:-3] 

這將導致以下search_strings

SearchQuery('blue') | SearchQuery('red') 
SearchQuery('green') | SearchQuery('yellow') | SearchQuery('black') 

如果我現在把這個字符串在我的查詢中,它不會工作。

entry.objects.annotate(search=SearchVector('colors')).filter(search=search_string) 

我很感謝任何幫助解決這個問題。

鏈接到Django的Postgres的搜索文檔:https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/search/

回答

2

我不知道PostgreSQL的,但:

# Can run this query with SQL (i think django query auto convert for each type of DataBase???) 
res = Models.Objects.filter(color__in = list1) 
more_res = Models.Objects.filter(Q(color__in = list1) | Q(color__in = list2)) 

Django的基本查詢(我不知道它是否爲你工作???)

1

您的search_string不工作,因爲它是一個字符串。

您可以使用eval使其工作。試試這個:

entry.objects.annotate(search=SearchVector('colors')).filter(search=eval(search_string)) 

雖然這不是最好的方法。看看this