Django:在get_queryset中返回HttpResponseRedirect

时间:2018-06-20 18:20:57

标签: python django

我正在以搜索形式解决查询。当查询仅产生单个对象时,我想将用户直接重定向到该对象的详细信息页面。如果没有,则它们应该落在结果页面上。我以为我会这样做,如下:

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,))) )。有什么想法吗?

1 个答案:

答案 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)