我正在将一个方法附加到我的 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)
这是使用稳定的 1.1.1 版 Django。
更新信息:
根据大家的评论反馈,我修改了我的问题,因为现在的问题是发现为什么 post_save 被触发两次。我目前的猜测是我的 models.py 代码被导入了两次并且 post_save 被连接了多次。
找出为什么它被导入/运行两次的最佳方法是什么?
最佳答案
显然,Python is sensitive to the way you import modules .就我而言,这不是我博客应用程序中任何导入代码的问题,而是 INSTALLED_APPS 配置的问题,我假设 Django 使用它来执行初始导入。
在我的博客应用程序中,我使用了如下导入:
from blog.models import *
我的 settings.py 配置为:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
...snip...
'sorl.thumbnail',
'mysite.blog',
)
添加“mysite”前缀是因为我最初在部署站点时遇到导入路径问题。后来我通过在我的 WSGI 脚本中添加多个路径解决了这个问题(因此它的行为与开发服务器相同)。
从 settings.py 中删除“mysite”前缀解决了这个问题:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
...snip...
'sorl.thumbnail',
'blog',
)
关于python - 为什么 post_save 在 Django 模型保存期间被提升两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2345400/