首页 > 解决方案 > 如果查询集是单个对象,如何将 ListView 重定向到 DetailView?

问题描述

我有一个带有自定义 get_queryset() 方法和 DetailView 的 ListView,但我想避免在查询集仅返回一个对象时显示 ListView(我想将用户重定向到该对象的 DetailView)。

有没有办法使用基于类的视图来实现这一点?我尝试在 ListView 的 get_queryset() 内进行重定向,但它不起作用,我在 ListView 类文档中找不到任何有用的东西。

标签: django

解决方案


我稍微修改了 Ivan 的回答(count()方法的使用是错误的,我的 DetailView 还需要使用 slug 而不是 pk),所以解决方案是:

from django.shortcuts import redirect
from django.views.generic import ListView

class MyListView(ListView):
    def get(self, request, *args, **kwargs):
        queryset = self.get_queryset() 
        if len(queryset) == 1:
            return redirect('your_detail_view_url', queryset.first().pk)
        return super().get(request, *args, **kwargs)

推荐阅读