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
相关产品推荐
相关产品推荐

