2016-07-22 84 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