相关疑难解决方法(0)

如何在Django视图中组合2个或更多查询集?

我正在尝试构建我正在构建的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?

django search django-queryset django-q

613
推荐指数
13
解决办法
24万
查看次数

MySQL SELECT查询字符串匹配

通常,在使用SELECT查询数据库时,通常需要查找与给定搜索字符串匹配的记录.

例如:

SELECT * FROM customers WHERE name LIKE '%Bob Smith%';
Run Code Online (Sandbox Code Playgroud)

该查询应该给我所有记录,其中'Bob Smith'出现在名称字段的任何位置.

我想做的是相反的.

我没有找到名称字段中包含"Bob Smith"的所有记录,而是希望找到名称字段位于"Robert Bob Smith III,PhD."中的所有记录,这是查询的字符串参数.

mysql sql string match

30
推荐指数
2
解决办法
10万
查看次数

是否可以连接QuerySet?

在搜索数据库之后,我最终得到了一组查询集.我想连接这些查询集,就像我们可以用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)

python django

5
推荐指数
2
解决办法
6392
查看次数

标签 统计

django ×2

django-q ×1

django-queryset ×1

match ×1

mysql ×1

python ×1

search ×1

sql ×1

string ×1