在View中,我修改了查询集,使其按名称进行筛选:
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’过滤查询是否为空(搜索参数没有结果),因此调用默认查询。
因此,有两个步骤:
- 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',返回的查询集为空,我希望对所有项执行默认的查询集。
我需要在模板中知道,因为我想告诉用户,我们没有找到您正在搜索的内容,所以我们向您展示了所有的结果。
发布于 2018-05-14 09:57:23
您可以在get_queryset中设置实例属性,并在get_context_data方法中检查它:
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 contexthttps://stackoverflow.com/questions/50327539
复制相似问题