スーパークラスのクエリを1つだけ作成して、ジャンゴのそれぞれのサブクラスのリストを取得する方法はありますか?[重複]
-
12-12-2019 - |
質問
重複の可能性:
Django モデルの継承は中央テーブルにクエリを実行します
ここにある公式ドキュメントに従ってください
https://docs.djangoproject.com/en/dev/topics/db/models/#multi-table-inheritance
経由でレストランのスーパーである場所をクエリできることがわかりました。
p = Place.objects.filter(name="Bob's Cafe")
したがって、その時点で、返されたオブジェクトのタイプもサブクラス Restaurant であるかどうかを確認し、そうである場合はサブクラスのフィールドにアクセスする方法はありますか?
現時点で言えることは、返されたオブジェクトはすべて Place クラスのものであり、オブジェクトがそのサブクラスとしてキャストされていないため、そのサブクラスのプロパティとメソッドは使用できないということだけです。
この方法論が不可能な場合、すべてのサブクラス モデルを含むリストを取得しようとするときに、スーパークラスを抽象化し、クエリのオーバーヘッドを最小限に抑えるために行ったベスト プラクティスは何ですか?理論的には、各サブクラスのクエリを実行してリストを結合できることは理解していますが、リストを日付などで並べ替えたい場合はさらに多くのことを行う必要があります。
解決
したがって、その時点で、返されたオブジェクトのタイプもサブクラス Restaurant であるかどうかを確認し、そうである場合はサブクラスのフィールドにアクセスする方法はありますか?
Place モデルをクエリした場合、返されるオブジェクトは、MTI 関連のサブクラスの知識を持たない Place インスタンスです。サブクラスに下位リンクするには、スーパークラスにフィールドを提供する必要があります。見る Django でマルチテーブル継承設計を汎用化する