首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redo queryset如果为空,则将信息传递给模板。

Redo queryset如果为空,则将信息传递给模板。
EN

Stack Overflow用户
提问于 2018-05-14 09:53:49
回答 1查看 93关注 0票数 0

在View中,我修改了查询集,使其按名称进行筛选:

代码语言:javascript
复制
def get_queryset(self, *args, **kwargs):
 qs = super().get_queryset()
 if self.request.GET.get('q'):
            qs = qs.search_by_keyword(self.request.GET.get('q'))
 return qs

如果没有结果被queryset过滤,我想要执行默认的Queryset,但也要传递给我这样做的模板。

我知道如何在context中签入由'q‘过滤的查询,但这并不能说明'q’过滤查询是否为空(搜索参数没有结果),因此调用默认查询。

因此,有两个步骤:

代码语言:javascript
复制
- detect that a queryset was empty and call the default queryset
- pass to the template a variable to tell that the initial queryset was empty and I call the default query

如果有人搜索q='keyword',返回的查询集为空,我希望对所有项执行默认的查询集。

我需要在模板中知道,因为我想告诉用户,我们没有找到您正在搜索的内容,所以我们向您展示了所有的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-14 09:57:23

您可以在get_queryset中设置实例属性,并在get_context_data方法中检查它:

代码语言:javascript
复制
def get_queryset(self, *args, **kwargs):
    qs = super().get_queryset()
    self.query_modified = False
    if self.request.GET.get('q'):
            qs = qs.search_by_keyword(self.request.GET.get('q'))
            if qs.exists():  
                self.query_modified = True
            else:
                qs = super().get_queryset()  
    return qs

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['query_modified'] = self.query_modified
    return context
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50327539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档