Django:在 get_queryset 中返回 HttpResponseRedirect

blu*_*isk 3 python django

我正在解决搜索表单中的查询。当查询只产生一个对象时,我想将用户直接重定向到该对象的详细信息页面。如果没有,他们应该登陆结果页面。我以为我会这样做:

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,)))
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用,并b''为我的模板生成一个空字节串 ( )。有任何想法吗?

Dan*_*man 5

这不是你可以在那里做的事情。get_queryset,顾名思义,需要返回一个查询集。您需要在返回响应的地方执行此操作。一种可能性是get(),但在那里这样做意味着您必须复制许多内置功能。

一种选择是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)
Run Code Online (Sandbox Code Playgroud)