Python 在哪里检查Django Admin上是否有更改
我在Django rest框架上有一个模型,我需要在Django管理中每次更新该模型上的字段时进行检查,以便在另一个模型中进行更新 我如何以及在哪里可以检查它Python 在哪里检查Django Admin上是否有更改,python,django-admin,django-rest-framework,Python,Django Admin,Django Rest Framework,我在Django rest框架上有一个模型,我需要在Django管理中每次更新该模型上的字段时进行检查,以便在另一个模型中进行更新 我如何以及在哪里可以检查它 谢谢@ssice是正确的,你可以利用它,还有类似的东西 或 如果是一次性的,您可以通过覆盖模型的\uuuu init\uuuu()和save()方法,为该模型使用自己的脏字段检查器。类似这样的情况(当然,根据您的需求,它可能会复杂得多): 小心 如果您使用modelupdate(),这些将不起作用,因为它不会触发django的save(
谢谢@ssice是正确的,你可以利用它,还有类似的东西 或 如果是一次性的,您可以通过覆盖模型的
\uuuu init\uuuu()
和save()
方法,为该模型使用自己的脏字段检查器。类似这样的情况(当然,根据您的需求,它可能会复杂得多):
小心
如果您使用model
update()
,这些将不起作用,因为它不会触发django的save()
或相关信号。但是你说你想跟踪从管理站点所做的更改,所以我假设这不是问题 @ssice是对的,你可以利用它,还有类似的东西
或
如果是一次性的,您可以通过覆盖模型的\uuuu init\uuuu()
和save()
方法,为该模型使用自己的脏字段检查器。类似这样的情况(当然,根据您的需求,它可能会复杂得多):
小心
如果您使用model
update()
,这些将不起作用,因为它不会触发django的save()
或相关信号。但是你说你想跟踪从管理站点所做的更改,所以我假设这不是问题 如果您只需要查看Django Admin change表单中的更改,您可以钩住ModelAdmin的save_model()
方法
class YourAdmin(ModelAdmin):
def save_model(self, request, obj, form, change):
super().save_model(request, obj, form, change)
# do what you have to do here
您可能还希望将其包含在事务中,以确保在其他操作失败时不会保存模型
class YourAdmin(ModelAdmin):
@transaction.atomic
def save_model(self, request, obj, form, change):
super().save_model(request, obj, form, change)
# do what you have to do here
如果您只需要查看Django Admin change表单中的更改,那么可以钩住ModelAdmin的
save_model()
方法
class YourAdmin(ModelAdmin):
def save_model(self, request, obj, form, change):
super().save_model(request, obj, form, change)
# do what you have to do here
您可能还希望将其包含在事务中,以确保在其他操作失败时不会保存模型
class YourAdmin(ModelAdmin):
@transaction.atomic
def save_model(self, request, obj, form, change):
super().save_model(request, obj, form, change)
# do what you have to do here
您不应该使用Django信号或其他技术自动进行更新吗?每次有人进行API调用时手动更新模型似乎不是一个好主意。模型a仅由Django Admin更新。例如,当模型A的名称在Django Admin上更新时,我需要对模型B进行更新。因此,我只需要知道何时更新了我的更改,@ssiceAnyway,为什么不自动进行更新?此外,你应该在问题中添加所有这些信息。你不应该使用Django信号或其他技术自动进行更新吗?每次有人进行API调用时手动更新模型似乎不是一个好主意。模型a仅由Django Admin更新。例如,当模型A的名称在Django Admin上更新时,我需要对模型B进行更新。因此,我只需要知道何时更新了我的更改,@ssiceAnyway,为什么不自动进行更新?此外,你应该在你的问题中添加所有这些信息。