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

Django中UpdateView类如何跳转至post-detail页并发送更新成功消息

解决方案

修复跳转不生效问题

你之前配置的success_url不生效,是因为success_url需要传入完整可访问的URL字符串,而你填的post-detail是带参数的命名路由,依赖当前更新的帖子pk值,无法静态定义,需要重写get_success_url方法动态生成跳转地址。

添加更新成功提示

使用Django内置的messages组件即可实现,需要先导入对应模块,在表单验证通过的逻辑中添加提示语句,最后在模板中渲染消息。

修改后完整的PostUpdateView代码

# 顶部先导入依赖
from django.contrib import messages
from django.urls import reverse
from django.contrib.auth.mixins import UserPassesTestMixin
from .models import Post

# 其他视图保持不变,修改PostUpdateView如下
class PostUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Post
    template_name = 'blog/post_create.html'
    fields = ['title', 'content']

    def form_valid(self, form):
        form.instance.author = self.request.user
        # 添加更新成功提示
        messages.success(self.request, "帖子更新成功")
        return super().form_valid(form)

    def test_func(self):
        post = self.get_object()
        return self.request.user == post.author

    # 动态生成跳转的帖子详情页地址
    def get_success_url(self):
        return reverse('post-detail', kwargs={'pk': self.object.pk})

注意:原来的代码没有继承UserPassesTestMixin,你写的test_func权限校验逻辑不会生效,补充这个Mixin后才能保证只有帖子作者可以编辑帖子。

模板添加消息渲染逻辑

在项目公共基础模板(通常是base.html)的页面顶部合适位置添加如下代码,即可展示提示消息:

{% if messages %}
  {% for message in messages %}
    <div class="alert alert-{{ message.tags }}">
      {{ message }}
    </div>
  {% endfor %}
{% endif %}

如果你的项目没有引入Bootstrap,自行修改div的样式即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:27:07