我正在尝试构建我正在构建的Django站点的搜索,并且在搜索中我正在搜索3种不同的模型.为了获得搜索结果列表的分页,我想使用通用的object_list视图来显示结果.但要做到这一点,我必须将3个查询集合并为一个.
我怎样才能做到这一点?我试过这个:
result_list = []
page_list = Page.objects.filter(
Q(title__icontains=cleaned_search_term) |
Q(body__icontains=cleaned_search_term))
article_list = Article.objects.filter(
Q(title__icontains=cleaned_search_term) |
Q(body__icontains=cleaned_search_term) |
Q(tags__icontains=cleaned_search_term))
post_list = Post.objects.filter(
Q(title__icontains=cleaned_search_term) |
Q(body__icontains=cleaned_search_term) |
Q(tags__icontains=cleaned_search_term))
for x in page_list:
result_list.append(x)
for x in article_list:
result_list.append(x)
for x in post_list:
result_list.append(x)
return object_list(
request,
queryset=result_list,
template_object_name='result',
paginate_by=10,
extra_context={
'search_term': search_term},
template_name="search/result_list.html")
Run Code Online (Sandbox Code Playgroud)
但这不起作用当我尝试在通用视图中使用该列表时,我收到错误.该列表缺少clone属性.
有人知道如何合并三个列表page_list,article_list和post_list?
通常,在使用SELECT查询数据库时,通常需要查找与给定搜索字符串匹配的记录.
例如:
SELECT * FROM customers WHERE name LIKE '%Bob Smith%';
Run Code Online (Sandbox Code Playgroud)
该查询应该给我所有记录,其中'Bob Smith'出现在名称字段的任何位置.
我想做的是相反的.
我没有找到名称字段中包含"Bob Smith"的所有记录,而是希望找到名称字段位于"Robert Bob Smith III,PhD."中的所有记录,这是查询的字符串参数.
在搜索数据库之后,我最终得到了一组查询集.我想连接这些查询集,就像我们可以用list元素做的那样.这是可能的还是有更好的方法来做到这一点?这里的最终目标是获取包含字段中一组字符串之一的表行的查询集.
for i in range(0,(searchDiff+1)):
filterString = str(int(searchRange[0]) + i)
myQuerySetTwoD.append(my.objects.filter(asn=filterString))
for j in range(0,(len(myQuerySetTwoD)-1)):
myQuerySet = myQuerySet + myQuerySetTwoD[j]
Run Code Online (Sandbox Code Playgroud)
更新:找到我自己的答案(关于写下问题的事情可能)
只是
from itertools import chain
Run Code Online (Sandbox Code Playgroud)
然后更换
myQuerySet = myQuerySet + myQuerySetTwoD[j]
Run Code Online (Sandbox Code Playgroud)
同
BgpAsnList = chain(BgpAsnList,BgpAsnListTwoD[j])
Run Code Online (Sandbox Code Playgroud)