1
xiaket 2011-10-12 22:35:56 +08:00
修改model的save方法吧
|
3
reorx 2011-12-06 19:47:48 +08:00
@xiaket 这样不大好,而且会使用到super这种奇技淫巧。最正确的处理方式是启用signal。其实它就是所谓的“触发事件”,任何Model的实例执行save后都会发出。
ref: https://docs.djangoproject.com/en/1.3/topics/signals/ |
5
reorx 2011-12-07 08:16:56 +08:00
@bindiry 呵呵,Django节点只有3个帖子,自然一眼就看到了。想起来当时在v2ex上发的第一个帖子也是关于Django的呢。
|
6
xiaket 2011-12-07 11:55:37 +08:00
@reorx signal我也用过, 个人感觉有点dark magic的味道, 让问题难以追踪. 倒是将这部分逻辑写在model的定义那儿, 一目了然. 我觉得这样更合理一点. 而且要说奇技淫巧, super远没有signal走得远.
我个人觉得signal更合理的应用方式是用来触发邮件啥的, 类似消息队列的触发等等. |
7
reorx 2011-12-07 20:24:09 +08:00
@xiaket 赞同,signal确实不怎么好用,而且会让逻辑变得分散而混乱。
super的用法一直存在争议,见这里:http://fuhm.net/super-harmful/ 所以我想Django设计signal的目的也许是为了避免开发者使用super而造成不可预见的奇怪报错,我自己在override诸如save之类的方法的时候就遇到过。当发现signal之后,下意识地觉得它更安全一些,没有进行严密的考证,见笑,以后仔细研究下两者的优劣之后再来讨论 :) |