在哪里检查Django Admin上是否有更改

时间:2016-07-22 15:52:08

标签: python django-admin django-rest-framework

我在Django-rest-framework上有一个模型,每次在Django-Admin中更新该模型上的字段以便在另一个模型中进行更新时,我需要检查。

我如何以及在哪里查看?

由于

2 个答案:

答案 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