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

Django:如何在UpdateView的form_valid中获取对象原始值?

在Django UpdateView的form_valid中获取原始对象值的方法

要实现对比字段修改前后的值并更新版本号,完全可以在form_valid方法里获取到更新前的原始对象值,具体做法如下:

核心思路是:当前form.instance已经被表单提交的数据修改过,所以需要从数据库重新查询未被修改的原始对象,再和修改后的值做对比。

修改后的完整代码示例:

class PostUpdateView(UpdateView):
    model = Post
    fields = ['title', 'body']

    def form_valid(self, form):
        # 从数据库获取未被修改的原始Post对象
        original_post = self.model.objects.get(pk=self.object.pk)
        # 对比body字段的新旧值
        if form.instance.body != original_post.body:
            # 版本号自增
            form.instance.body_version += 1
        # 调用父类方法完成最终保存(无需手动调用form.save())
        return super().form_valid(form)

额外说明:

  • 无需手动调用form.save(),父类的form_valid方法会自动处理保存逻辑
  • 如果需要同时对比多个字段,直接扩展判断条件即可,比如同时检查title和body:
    if form.instance.body != original_post.body or form.instance.title != original_post.title:
        form.instance.body_version += 1
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:05:29