我正在解决搜索表单中的查询。当查询只产生一个对象时,我想将用户直接重定向到该对象的详细信息页面。如果没有,他们应该登陆结果页面。我以为我会这样做:
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''为我的模板生成一个空字节串 ( )。有任何想法吗?
这不是你可以在那里做的事情。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)
| 归档时间: |
|
| 查看次数: |
613 次 |
| 最近记录: |