1

Django ドキュメントから:

後方関係はどのように可能ですか?

他のオブジェクト リレーショナル マッパーでは、両側でリレーションシップを定義する必要があります。Django 開発者は、これは DRY (Don't Repeat Yourself) の原則に違反していると考えているため、Django では一方の関係のみを定義する必要があります。

しかし、他のモデル クラスが読み込まれるまで、どのモデル クラスが関連しているかをモデル クラスが認識できない場合、どうしてこれが可能なのでしょうか?

答えは INSTALLED_APPS 設定にあります。モデルが初めて読み込まれると、Django は INSTALLED_APPS 内のすべてのモデルを繰り返し処理し、必要に応じてメモリ内に後方関係を作成します。基本的に、INSTALLED_APPS の機能の 1 つは、Django にモデル ドメイン全体を伝えることです。

この ORM モデルを取得する方法はありますか? 自動的に作成されない逆の関係をデバッグしようとしていますが、Django が作成した ORM 全体を確認するのに非常に役立ちます。

4

2 に答える 2

1

特定の ORM の「モデル」はありませんが、役立つ可能性があるものがいくつかあります。

from django.db.models.loading import get_models

get_models()は、登録されたすべてのモデルのリストを返します。このリストは、記述しているメカニズムがループするものです。

YourModel._meta.get_all_related_objects_with_model()

この関数は、登録されたすべてのモデルのすべてのフィールドをループし、 との逆の関係を見つけて返しますYourModel

( is an object)のOptionsクラスは、このようなものを探すのに適した場所です。django.db.models.optionsYourModel._metaOptions

于 2013-09-30T11:38:21.367 に答える
0

Django は ORM を「作成」しないため、この質問は意味がありません。後方関係をサポートするために ORM がモデル クラスに追加するプロパティを知りたい場合は、次のことができます。

  1. django シェルを開き、モデルをインポートして検査します
  2. ソースコードを読んでください(オープンソースですよね?)
  3. それでも不十分な場合は、適切な場所にブレークポイントを追加し、デバッガーを介してすべてを実行します
于 2013-09-30T11:36:25.113 に答える