You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django类视图success_url如何引用模型get_absolute_url方法

Django基于类视图中通过模型get_absolute_url配置跳转地址的实现方法

不要直接在类属性success_url的定义位置调用模型的get_absolute_url方法:success_url是类加载阶段就会初始化的静态属性,此时视图还未查询到本次要操作的Comment实例,既没有实例传入作为方法的self参数,也无法获取评论关联的post.slug数据,直接调用会抛出参数错误或生成错误的跳转路径。

正确实现方式是重写视图类的get_success_url()方法,该方法会在删除操作执行完成、对应模型实例加载到内存后才触发,此时可以通过self.object拿到当前操作的评论实例,直接调用实例上的get_absolute_url()方法即可拿到目标跳转地址。

注意:删除操作执行后,数据库中的Comment记录会被移除,但内存中self.object指向的实例数据会暂时保留,完全可以正常读取关联的post字段生成跳转路径,不会出现查询不到数据的问题。

修改后的DeleteCommentView代码如下:

class DeleteCommentView(DeleteView):
    model = Comment
    template_name = "delete_comment.html"

    def get_success_url(self):
        return self.object.get_absolute_url()

补充说明:Django内置的CreateView、UpdateView、DeleteView等编辑类视图,默认的get_success_url逻辑本身就会优先读取模型实例的get_absolute_url返回值,如果没有特殊跳转规则,甚至可以省略success_url配置、也不重写方法,框架会自动调用该方法获取跳转地址。但显式重写get_success_url的写法兼容性最好,不会因为Django版本差异出现异常。

内容的提问来源于stack exchange,提问作者Ekansh Virmani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 21:57:24