在 ModelAdmin 中,如何在覆盖 `save_model()` 时获取对象的先前值

Lor*_*Ang 6 django python-3.x

当重写时ModelAdmin.save_model(),我希望能够在对象的新值与旧值之间运行一些计算。有什么方法可以让我在更改之前获得“旧对象”及其所有以前的数据吗?

例如,如果我有一个Objectwith 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"
Run Code Online (Sandbox Code Playgroud)

hwh*_*te4 7

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

old_object = self.model.objects.get(id=obj.id)
Run Code Online (Sandbox Code Playgroud)

如果您需要处理它不存在的情况,您可以这样做

try:
    old_object = self.model.objects.get(id=obj.id)
except self.model.DoesNotExist:
    ...
Run Code Online (Sandbox Code Playgroud)

self.model只是在 ModelAdmin 中设置为您的模型类,以便您可以将其替换为您的模型类