2017-01-29 141 views
0

我正在使用Django 1.9,現在試圖覆蓋save方法的行爲。問題是,當我做instance.some_field = some_value時,self對象已被修改,但我需要知道這是some_field的原始值。要做到這一點,唯一的出路似乎是通過self的pk從數據庫中獲取對象。通過變量模型名稱和pk獲取模型實例

所以我想知道什麼是GENERIC語法 - 如果有的話 - 從數據庫中獲取實例?通過說GENERIC,我暗示我不想明確地鍵入模型名稱(如MYMODEL.objects.get(...)),而是讓Django根據目標實例的模型找出正確的模型。

爲了使問題更清晰,讓我說明一個僞代碼我的目標:

def save_extented(self, *args, **kwargs): 
    original_object = (self model).objects.get(pk = self.pk) 

這可能嗎?或者,也許我不需要這個,並且有一些聰明的Django可以通過回滾字段值來獲取實例?

回答

1

您可以使用django-dirtyfieldspre_save信號:

@receiver(pre_save, sender=MyModel) 
def pre_save_logic(sender, instance, **kwargs): 
    if 'my_field' in instance.get_dirty_fields(): 
     do_some_logic()