python - 无法在 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。
解决方案
推荐阅读
- cassandra - 使用 CassandrSink 的 Flink 作业因写入错误而失败
- nginx - NGINX Ingress 给出 503 服务暂时不可用。前端出现 nginx/1.19.1 错误
- javascript - 为动态创建的链接 JS 设置 .active 类
- c# - ProtoEnum 属性用于重命名冲突的默认值
- asp.net-core - Net Core 2.1 控制器在 json 没有引用循环时截断 Json
- android - 一加 6t 连接到 Mac
- heroku - 我可以有两个或多个使用 Heroku 的 Web 进程吗
- python-3.x - Cloud Run 请求触发错误 400 未到达已部署的服务
- abap - PSA 表 (SAP BW) 中未收到数据
- python - 使用 Python 将数据框拆分为不同的列