1

現在の django プロジェクトのアプリ間でモデルをインポートする際に問題があります。開発サーバーを実行するか、データベースを同期しようとすると、次のエラーが表示されます。

File "/path/to/Project/../Project/app1/models.py", line 3, in <module>
class SomeModel(Thing):
NameError: name 'Thing' is not defined

これはProject/main/models.pyで定義されており、次の方法で Project /app1/models.pyにインポートします。

from project.main.models import Thing

この種のことは、python が循環インポートを防止した結果である可能性があることを認識しています。

現在、main、app1、app2 の 3 つの django アプリがあります。

各アプリのインポートは次のようになります。

主要:

from project.app1.models import AnotherThing

app1:

from project.main.models import Thing

app2:

from project.main.models import Thing
from project.app1 import Something

app1 から app2 へのモデルのインポートが問題を引き起こしていると思われます。これらのアプリはどちらも main からモデルをインポートし、次に app1 からモデルをインポートするためです。

この場合、これらのインポートと同じ効果を得るために他にどのような方法を使用できますか? 私がこれに遭遇しないように、物事を整理するより受け入れられた方法はありますか?

4

1 に答える 1

3

これらのモデルをサブクラス化する場合は、循環依存を削除する必要があります。一般的なものを別のモジュールにリファクタリングし、それら2つが互いの代わりにそれをインポートするようにします。モデルが外部キーとしてのみ使用される場合は、オブジェクトの代わりに文字列を使用してインポートを延期できます(たとえばForeignKey('app.Model')、詳細についてはドキュメントを参照してください)。

于 2011-08-04T19:34:11.580 に答える