在View a中,我修改了查询集以按名称过滤:
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
如果q Queryset没有过滤结果,我想执行默认查询集,但也传递给我这样做的模板。
我知道如果我的查询是通过' q'过滤的,context
如何办理登机手续,但这并不能说明' 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'
并且返回的查询集为空,并且我希望对所有项执行默认查询集,则为一个示例。
我需要在模板中知道,因为我想告诉用户,我们没有找到您正在搜索的内容,因此我们会向您显示所有结果。
答案 0 :(得分:1)
您可以在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 context