【发布时间】:2011-01-21 16:05:48
【问题描述】:
我将一个方法附加到我的 Django 模型的 post_save 信号。这样,每当修改模型时,我都可以清除一些缓存的项目。
我遇到的问题是保存模型时信号被触发了两次。它不一定会伤害任何东西(代码只会优雅地出错),但它不可能是正确的。
一个简单的例子,只是将模型打印到控制台(使用开发服务器):
from blog.models import Post
from django.db.models import signals
def purge_cache(sender, **kwargs):
print 'Purging %s' % sender
signals.post_save.connect(purge_cache, sender=Post)
这是使用 Django 的稳定 1.1.1 版本。
更新信息:
根据每个 cmet 的反馈,我修改了我的问题,因为问题现在发现了为什么 post_save 被触发两次。我目前的猜测是我的 models.py 代码被导入了两次,并且 post_save 被多次连接。
找出它为什么被导入/运行两次的最佳方法是什么?
【问题讨论】:
-
如果注释掉
post_delete连接线,post_save信号是否会引发两次? -
查看 django 代码,它确实没有发送 save(),你确定你收到的是 post_delete 信号而不是 post_save 两次?
-
@Desintegr - 我目前无法尝试,但这是个好主意。我今晚会尝试并更新问题。如果在删除 post_delete 后仍然出现这种情况,我将把我的问题改为“为什么 post_save 信号会出现两次?” :) 也许 models.py 代码运行了两次,信号连接了多次?
-
是的,models.py 可以导入几次,例如在您自己的导入中。我认为这是一个常见问题:)
-
@Dmitry & Desintegr - 我认为你们俩都是对的。删除 post_delete 仍然会触发清除两次。我已更改问题以匹配新问题。
标签: python django django-models signals