django 在ModelAdmin中,当覆盖`保存_model()`时,如何获取对象以前的值

4zcjmb1e  于 2023-06-25  发布在  Go
关注(0)|答案(2)|浏览(118)

在重写ModelAdmin.save_model()时,我希望能够在对象的新值与旧值之间运行一些计算。有没有什么方法可以让我得到“旧对象”,以及它在更改之前的所有数据?
例如,如果我有一个Object,其中obj.name =“foo”,我通过Django管理应用程序更新为现在的obj.name =“bar”,在保存时,应该相应地打印出以下代码:

from django.contrib import admin

class ObjectAdmin(admin.ModelAdmin):
     def save_model(self, request, obj, form, change):
          old_object = self.get_old_object()
          print(old_object.name)  # Should print out "foo"
          print(obj.name)         # Should print out "bar"
js81xvg6

js81xvg61#

所以你可以通过这样的数据库查询来获取对象

old_object = self.model.objects.get(id=obj.id)

如果你需要处理它不存在的情况,你可以

try:
    old_object = self.model.objects.get(id=obj.id)
except self.model.DoesNotExist:
    ...

另外,self.model只是设置为ModelAdmin中的模型类,因此您可以将其替换为模型类

wyyhbhjk

wyyhbhjk2#

@hwhite4的回答符合预期。但是,如果你想避免数据库查找,你可以这样做:

old_object = form.initial['name']

其中,name是字段的名称。

相关问题