我在Django-rest-framework上有一个模型,每次在Django-Admin中更新该模型上的字段以便在另一个模型中进行更新时,我需要检查。
我如何以及在哪里查看?
由于
答案 0 :(得分:0)
@ssice是对的,您可以使用Django Signals,以及django-dirtyfields之类的内容。
或者
如果它是一次性的事情,您可以通过覆盖模型的$("button").click(function(){
$(this).css({'background-color': getRandomColor()});
});
和__init__()
方法来为该模型滚动自己的脏字段检查器。这样的事情(当然,根据您的要求,它可能会复杂得多):
save()
<强>注意强>
如果你使用模型def __init__(self, *args, **kwargs):
super(YOUR_MODEL, self).__init__(*args, **kwargs)
# SAVE THE INITIAL VALUE
self.__original_value = self.value_you_want_to_track
def save(self, *args, **kwargs):
# Compare the initial value with the current value
if self.__original_value != self.value_you_want_to_track:
# DO SOMETHING, MAYBE TRIGGER SIGNAL
super(YOUR_MODEL, self).save(*args, **kwargs)
# Finally update the initial value after the save complete
self.__original_value = self.value_you_want_to_track
,这些将不起作用,因为它不会触发django的update()
或相关信号。但是你说你想跟踪管理站点所做的更改,所以我假设这不是问题。
答案 1 :(得分:0)
如果您只需要在Django Admin更改表单中查看更改,则可以挂钩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