2016-07-22 77 views
1

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

如何以及在哪里可以检查它?

感谢

+1

您不应该使用Django Signals或其他技术自动更新吗?每次有人进行API调用时,手动更新模型似乎不是一个好主意。 – ssice

+0

模型A仅由Django Admin更新。例如,当模型A的名称在Django Admin上更新时,我需要对模型B进行更新。因此,我只需要知道更新何时进行了更改,@ssice – 62009030

+0

无论如何,为什么不自动进行更新?此外,您应该将所有信息添加到您的问题。 – ssice

回答

0

@ssice是正确的,你可以利用Django Signals,喜欢的东西django-dirtyfields一起。

或者

如果这是一个一次性的事情,你可以通过重写模型__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 

注意

如果你使用模型update(),因为它不会触发这些是行不通的django的save()或相关信号。但是你说你想跟踪管理网站所做的更改,所以我认为这不是问题。

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