Django で複数の関連テーブルのデータを表示するには、多くの場合、内部結合が必要になります。この記事では、Django の ORM (オブジェクト リレーショナル マッパー) を使用して内部結合を実行する方法を説明します。
モデル リレーションシップ
提供されたコードは、次のテーブル関係を定義します:
select_relative を使用した内部結合
内部結合効果を実現するには、Django の select_relative メソッドを使用できます。これにより、主オブジェクトとともに関連オブジェクトが事前に選択され、関連データへのアクセスに必要なデータベース クエリの数が削減されます。
views.py では、次のコードを使用して内部結合を実行できます。
pubs = publication.objects.select_related('country', 'country_state', 'city')
生成された SQL の検査
str(pubs.query) を使用すると、生成された SQL クエリを検査できます。これは、テーブル間の内部結合を備えた、提供された SQL クエリに似ています:
SELECT "publication"."id", "publication"."title", ..., "country"."country_name", ... FROM "publication" INNER JOIN "country" ON ( "publication"."country_id" = "country"."id" ) INNER JOIN "countrystate" ON ( "publication"."countrystate_id" = "countrystate"."id" ) INNER JOIN "city" ON ( "publication"."city_id" = "city"."id" )
関連データへのアクセス
内部結合の後、関連データには、それぞれのモデル オブジェクト属性を通じてアクセスできます。たとえば、各出版物の都市名を表示するには:
{% for p in pubs %} {{ p.city.city_name}} # p.city has been populated in the initial query # ... {% endfor %}
Django の select_relative を利用すると、内部結合を効率的に実装して関連テーブルからデータを取得でき、データベース クエリを削減し、パフォーマンスを向上させることができます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3