これは Django よりも Python に関する質問だと思います。
しかし、基本的に私はモデルAでやっています:
from myproject.modelb.models import ModelB
モデル B では次のようになります。
from myproject.modela.models import ModelA
結果:
名前 ModelA をインポートできません
私は何か禁止されていることをしていますか?ありがとう
これは Django よりも Python に関する質問だと思います。
しかし、基本的に私はモデルAでやっています:
from myproject.modelb.models import ModelB
モデル B では次のようになります。
from myproject.modela.models import ModelA
結果:
名前 ModelA をインポートできません
私は何か禁止されていることをしていますか?ありがとう
Python モジュールは、新しい名前空間で上から下に実行することでインポートされます。モジュール A がモジュール B をインポートすると、モジュール B が読み込まれるまで A.py の評価が一時停止されます。モジュール B がモジュール A をインポートすると、モジュール A の部分的に初期化された名前空間が取得されます。この場合、そのクラスの定義の前にModelA
インポートが行われるため、クラスがありません。myproject.modelb.models
Django では、クラス オブジェクトではなく名前でモデルを参照することで、これを修正できます。だから、言う代わりに
from myproject.modela.models import ModelA
class ModelB:
a = models.ForeignKey(ModelA)
あなたは(インポートなしで)使用します:
class ModelB:
a = models.ForeignKey('ModelA')
相互インポートは、通常、モデルを正しく設計していないことを意味します。
A が B に依存している場合、B も A に依存していてはなりません。
Bを2つに分けます。
B1 - A に依存します。
B2 - A に依存しません。
A は B1 に依存します。B1 は B2 に依存します。円形性が削除されました。