Django 的 Models 更新时,不触发 Signals 解决办法
django的信号机制Signals
当指定的models变化时,能够触发django的Signals机制。这样我们就可以针对models变化做对应的操作。
简单的使用文档:https://www.cnblogs.com/fiona-zhong/p/9983996.html
原来的代码
然后我通过Signals机制,监控字段is_active
是否改为True
,然后触发一些动作
遇到的问题
本以为views.py
中的代码执行后,会触发Signals
机制,然后do something
,但是实际没有任何动作。
解决办法
修改views.py
中的数据更新方法。改为:
方式一:
方式二:
原因
因为这种形式:User.objects.filter(id=1).update(**user_attr)
,Django直接更新的数据库,没有经过models
,所以不会触发Signals
机制。
官方文档有解释:https://docs.djangoproject.com/zh-hans/2.2/topics/db/queries/ ,搜索"要认识到 update() 方法是直接转为 SQL 语句的",后边明确写有。
知道了原因,我们就针对修改为上边的两种更新方式就可以了。
参考文档:
官方文档:https://docs.djangoproject.com/zh-hans/2.2/topics/db/queries/
Django model update的各种用法介绍:https://juejin.im/post/5b588b656fb9a04fba6e8681
本文首发于BigYoung小站http://www.bigyoung.cn
版权声明: 本文为 InfoQ 作者【Young先生】的原创文章。
原文链接:【http://xie.infoq.cn/article/3848c5f2e30afa7d0d2278bd6】。未经作者许可,禁止转载。
评论