首页 > 解决方案 > 无法在 Django 模型中按名称访问实例变量

问题描述

我正在尝试将字段的值保存在我的视频模型上的实例变量中,然后在post_save信号接收器中使用此实例变量来查看字段的值是否已更改。

我要离开这个 Stack Overflow 的答案:

https://stackoverflow.com/a/36722021/

这是我的视频模型:

class Video(models.Model):
    approval = models.BooleanField(default=True)

    def __init__(self, *args, **kwargs):
        super(Video, self).__init__(*args, **kwargs)
        self.__original_approval = self.approval

这是我的post_save信号接收器:

@receiver(post_save, sender=Video)
def handle_video_save(sender, **kwargs):
    video = kwargs.get('instance')
    previous_approval = video.__original_approval
    # check if value has changed...

这是我得到的错误:

AttributeError: 'Video' object has no attribute '__original_approval'

post_save在调试时,我发现可以在我的信号接收器中以这种方式访问​​实例变量:

previous_approval = video._Video__original_approval

所以,使用video._Video__original_approval作品,但我想知道为什么我无法访问实例变量,正如我在 Stack Overflow 上的其他答案中看到的那样,使用video.__original_approval?

我正在使用 Django 1.11.20 和 Python 3.6.6。

标签: pythondjangodjango-modelsdjango-1.11

解决方案


推荐阅读