2017-05-31 51 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