我正在以搜索形式解决查询。当查询仅产生单个对象时,我想将用户直接重定向到该对象的详细信息页面。如果没有,则它们应该落在结果页面上。我以为我会这样做,如下:
Module
不幸的是,这不起作用,并且为我的模板产生了一个空字节串(class ResultsView(generic.ListView):
template_name = "chars/results.html"
context_object_name = "chars"
slug_field = 'name'
def get_queryset(self):
char = self.kwargs.pop('slug', '')
object_list = get_list_or_404(Char, name=char)
if len(object_list) > 1:
return object_list
return HttpResponseRedirect(reverse('chars:details', args=(char,)))
)。有什么想法吗?
答案 0 :(得分:4)
那不是您可以在那做的事情。顾名思义,get_queryset
需要返回一个查询集。您需要在返回响应的地方执行此操作。一种可能性是get()
,但是在那做,就意味着您将不得不复制很多内置功能。</ p>
一种选择是render_to_response
-我有点被撕裂了,因为这样做与该函数的名称冲突,但这是一个很整洁的地方。
def render_to_response(self, context):
if len(self.object_list) == 1:
return redirect('chars:details', char)
return super().render_to_response(context)