django - 如果查询集是单个对象,如何将 ListView 重定向到 DetailView?
问题描述
我有一个带有自定义 get_queryset() 方法和 DetailView 的 ListView,但我想避免在查询集仅返回一个对象时显示 ListView(我想将用户重定向到该对象的 DetailView)。
有没有办法使用基于类的视图来实现这一点?我尝试在 ListView 的 get_queryset() 内进行重定向,但它不起作用,我在 ListView 类文档中找不到任何有用的东西。
解决方案
我稍微修改了 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)
推荐阅读
- json - 在 go 中比较两个 JSON
- php - 从不同的主机 php 连接 Google Cloud SQL
- r - R:组内唯一值的计数
- python - 如何在 django 中检查对象是否过期?
- parse-server - 当我将对象添加到已经存在的关系时,解析服务器从关系中删除对象
- javascript - 如何使用输入值通过 js 或 jquery 范围游标指针值
- python-3.x - sre_constants.error 来自 spacy 的错误 en_core_web_sm
- firebase - 我的 Flutter App 的 Cache 文件夹没有在手机的内部存储中创建?
- java - 如何为android提供的不同日期和时间格式的视频添加时间戳?
- scala - Scala 中 Spark Dataframe 上的平面图