python - 为什么 post_save 在 Django 模型保存期间被提升两次?

标签 python django django-models signals

我正在将一个方法附加到我的 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/

相关文章:

python - 在 MySql 中存储文本文件数据,时间戳在引号 ""中,并且有一些缺失的数据值

python - 如何将自定义 Django 用户模型注册到管理页面?

python - 当我将 isin 与 Dask 数据帧一起使用时,会引发 NotImplementedError

python - 如何将 Django 和 .net core 项目连接为单个应用程序?

javascript - Django——将字典传递给模板并绘制折线图

python - 我如何继承 Django CreateView

Django测验应用程序,REST,如何设计模型?

python - 创建一个 Django Form 来保存两个模型

python - TensorFlow 接受哪些 Python 类型作为 "tensor"类型的 Attr?

python - 选择列中每行的前 N ​​个元素