利用Django-admin来修改网站内容时,如果获得触发事件?

2011-10-12 22:29:15 +08:00
 bindiry
比如,我想在Django-Admin里修改一条记录后

往一个文本文件里记录一下当前记录所在的表的记录数。
4957 次点击
所在节点    Django
8 条回复
xiaket
2011-10-12 22:35:56 +08:00
修改model的save方法吧
bindiry
2011-10-12 22:46:12 +08:00
@xiaket 非常感谢,测试通过。
reorx
2011-12-06 19:47:48 +08:00
@xiaket 这样不大好,而且会使用到super这种奇技淫巧。最正确的处理方式是启用signal。其实它就是所谓的“触发事件”,任何Model的实例执行save后都会发出。

ref: https://docs.djangoproject.com/en/1.3/topics/signals/
bindiry
2011-12-07 00:09:24 +08:00
@reorx 这么久的帖子都被挖出来,谢谢指教。
reorx
2011-12-07 08:16:56 +08:00
@bindiry 呵呵,Django节点只有3个帖子,自然一眼就看到了。想起来当时在v2ex上发的第一个帖子也是关于Django的呢。
xiaket
2011-12-07 11:55:37 +08:00
@reorx signal我也用过, 个人感觉有点dark magic的味道, 让问题难以追踪. 倒是将这部分逻辑写在model的定义那儿, 一目了然. 我觉得这样更合理一点. 而且要说奇技淫巧, super远没有signal走得远.

我个人觉得signal更合理的应用方式是用来触发邮件啥的, 类似消息队列的触发等等.
reorx
2011-12-07 20:24:09 +08:00
@xiaket 赞同,signal确实不怎么好用,而且会让逻辑变得分散而混乱。

super的用法一直存在争议,见这里:http://fuhm.net/super-harmful/

所以我想Django设计signal的目的也许是为了避免开发者使用super而造成不可预见的奇怪报错,我自己在override诸如save之类的方法的时候就遇到过。当发现signal之后,下意识地觉得它更安全一些,没有进行严密的考证,见笑,以后仔细研究下两者的优劣之后再来讨论 :)
lepture
2011-12-07 20:43:57 +08:00
@reorx 不知道現在的版本怎麼樣了,當年signal是有bug的,會重複觸發。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/19398

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX