我遇到了post_save
无缘无故被调用两次的问题。现在看来,原因是这里描述的双重导入:为什么在保存 Django 模型期间 post_save 被提升两次?接受答案建议删除其中有效的mysite
部分mysite.foo
,但为什么要进行双重导入?
问问题
175 次
1 回答
3
该问题是由在 Python 中混合导入路径引起的。以下面的结构 w/ proj
findable insys.path
为例。
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
级别。在您发布的链接中,只要项目或 Django 文件中'mysite.blog'
没有其他导入就可以了。import blog
在 Django 1.4 中,该问题主要通过将 manage.py 一个目录从项目目录向上移动到其不再是包的父目录来解决,从而将导入限制为proj
level。
于 2012-04-22T04:14:07.463 回答