我遇到了post_save
被调用两次的问题,没有明显的理由。现在似乎原因是双重导入,如下所述:Why is post_save being raised twice during the save of a Django model?接受答案建议删除有效的mysite
mysite.foo
部分,但为什么要进行双重导入?< / p>
答案 0 :(得分:3)
The issue是由Python中的混合导入路径引起的。例如,可以在proj
中找到具有sys.path
的{{1}}结构。
proj/
__init__.py
app/
__init__.py
foo.py
# In proj directory, enter Python shell
>>> import sys
>>> before = set(sys.modules)
>>> import app.foo
>>> set(sys.modules) - before
set(['app', 'app.foo'])
>>> before = set(sys.modules)
>>> from proj.app import foo
>>> set(sys.modules) - before
set(['proj.app.foo', 'proj', 'proj.app'])
Python实际上将proj.app.foo
和app.foo
视为不同的模块。您可以发现app/__init__.py
和app/foo.py
被导入两次,因此其中的任何内容实际上都会被执行两次。要解决此问题,我们应使用一致的导入路径:从proj
级别或../proj
级别。在您发布的链接中,'mysite.blog'
很好 AS LONG AS 项目或Django文件中没有其他类似import blog
的导入。
在Django 1.4中,问题主要由moving manage.py one directory up from project directory to its parent directory which is no longer a package, thus limit importing to proj
level解决。