簡體   English   中英

如何檢查post_save中的模型字段是否已更改?

[英]How can i check if model field was changed in post_save?

如果模型字段之一已更新,我必須在post_save中做一些額外的邏輯,但無法檢查它是否已更新。

試圖覆蓋這樣的init方法

def __init__(self, *args, **kwargs):
    super(Profile, self).__init__(*args, **kwargs)
    self.__old_city = self.city

並在post_save檢查

if instance.city != instance.__old_city:
    #extra logic

但有一個例外

AttributeError:“配置文件”對象沒有屬性“ __old_city”

我在做什么錯(除了使用信號:D)?

那是因為您正在使用名稱修改功能。

雙下划線(名稱改寫)

從Python文檔中:

形式為__spam的任何標識符(至少兩個前導下划線,至多一個下划線)在文本上被_classname__spam替換,其中classname是當前的類名,其中前導下划線被去除。 進行這種修飾時無需考慮標識符的語法位置,因此可以用於定義類私有實例和類變量,方法,全局變量中存儲的變量,甚至實例中存儲的變量。 在其他類的實例上對此類私有。

這意味着要訪問instance.__old_city您需要使用_className__attribute_name

因此__old_city將被破壞-> _Profile__old_city

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM