2

これは Django よりも Python に関する質問だと思います。

しかし、基本的に私はモデルAでやっています:

from myproject.modelb.models import ModelB

モデル B では次のようになります。

from myproject.modela.models import ModelA

結果:

名前 ModelA をインポートできません

私は何か禁止されていることをしていますか?ありがとう

4

2 に答える 2

6

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')
于 2010-01-22T20:48:52.363 に答える
2

相互インポートは、通常、モデルを正しく設計していないことを意味します。

A が B に依存している場合、B も A に依存していてはなりません。

Bを2つに分けます。

B1 - A に依存します。

B2 - A に依存しません。

A は B1 に依存します。B1 は B2 に依存します。円形性が削除されました。

于 2010-01-22T20:53:21.320 に答える