如果其中一个模型字段已更新,我必须在post_save中做一些额外的逻辑,但无法检查它是否已更新。
试图覆盖这样的初始化方法
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之外)?
答案 0 :(得分:0)
那是因为您正在使用名称处理。
双下划线(名称修饰)
来自Python文档:
任何形式的__spam标识符(至少两个下划线, 在文字上最多替换一个结尾的下划线) _classname__spam,其中classname是当前的类名,其中前导下划线被去除。这种处理是无视的 到标识符的句法位置,因此可以用来 定义类私有实例和类变量,方法,变量 存储在全局变量中,甚至变量存储在实例中。私人 该类在其他类的实例上。
要访问instance.__old_city
,您需要使用_className__attribute_name
因此__old_city
将被->
_Profile__old_city