post_save
明らかな理由もなく 2 回呼び出されるという問題に遭遇しました。ここで説明されているように、原因は二重インポートだったようです: Why is post_save being raise during the save of a Django model? 受け入れた回答は、機能したmysite
部分を削除することを提案mysite.foo
していますが、なぜ二重インポートを行うのですか?
質問する
175 次
1 に答える
3
この問題は、Pythonでインポートパスが混在していることが原因で発生します。たとえば、でproj
見つけることができる次の構造を考えてみましょう。sys.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
2回インポートすることができるので、実際には2回実行されます。これを修正するには、proj
レベルからまたは../proj
レベルからの一貫したインポートパスを使用する必要があります。あなたが投稿したリンクで'mysite.blog'
は、プロジェクトやDjangoimport blog
ファイルのような他のインポートがない限り問題ありません。
Django 1.4では、この問題は、manage.pyをプロジェクトディレクトリからパッケージではなくなった親ディレクトリに1つ上のディレクトリに移動することでほとんど解決され、インポートをproj
レベルに制限します。
于 2012-04-22T04:14:07.463 に答える