0

重複の可能性:
Django モデルの継承が中央テーブルにクエリを実行する

ここにある公式ドキュメントに従って
ください https://docs.djangoproject.com/en/dev/topics/db/models/#multi-table-inheritance

経由でレストランのスーパーであるプレイスをクエリできることがわかりました

p = Place.objects.filter(name="Bob's Cafe")

その時点で、返されたオブジェクトがサブクラス Restaurant のタイプでもあるかどうかを確認し、そうであればサブクラスのフィールドにアクセスする方法はありますか?

現時点で私が言えることは、返されたすべてのオブジェクトが Place クラスのものであり、オブジェクトがそのサブクラスとしてキャストされていないため、それらのサブクラスのプロパティとメソッドが利用できないということだけです。

この方法論が不可能な場合、すべてのサブクラス モデルを含むリストを取得しようとするときに、スーパー クラスを抽象化し、クエリのオーバーヘッドを最小限に抑えるためのベスト プラクティスは何ですか? 理論的には、各サブクラスのクエリを実行してからリストを結合できることを理解していますが、そのリストを日付で並べ替えるには、さらに多くのことを行う必要があります。

4

1 に答える 1

1

その時点で、返されたオブジェクトがサブクラス Restaurant のタイプでもあるかどうかを確認し、そうであればサブクラスのフィールドにアクセスする方法はありますか?

Place モデルを照会した場合、返されるオブジェクトは、MTI に関連付けられたサブクラスをまったく知らない Place インスタンスです。サブクラスに下位リンクするには、スーパークラスにフィールドを提供する必要があります。Django で複数テーブルの継承設計をジェネリックにするを参照してください。

于 2012-03-14T18:16:36.717 に答える