Untuk memaparkan data daripada berbilang jadual berkaitan dalam Django, cantuman dalaman selalunya diperlukan. Dalam artikel ini, kami akan meneroka cara melakukan gabungan dalaman menggunakan ORM Django (Object-Relational Mapper).
Hubungan Model
The models.py dalam kod yang disediakan mentakrifkan perhubungan jadual berikut:
Sertai Dalaman Menggunakan select_related
Untuk mencapai kesan cantuman dalaman, kaedah select_related Django boleh digunakan. Ia pra-memilih objek yang berkaitan bersama-sama dengan objek utama, mengurangkan bilangan pertanyaan pangkalan data yang diperlukan untuk mengakses data yang berkaitan.
Dalam views.py, kod berikut boleh digunakan untuk melakukan gabungan dalaman:
<code class="python">pubs = publication.objects.select_related('country', 'country_state', 'city')</code>
Memeriksa SQL Dijana
Menggunakan str(pubs.query), pertanyaan SQL yang dijana boleh diperiksa. Ia akan menyerupai pertanyaan SQL yang disediakan, dengan cantuman dalaman antara jadual:
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" )
Mengakses Data Berkaitan
Selepas cantuman dalaman, data berkaitan boleh diakses melalui atribut objek model masing-masing. Contohnya, untuk memaparkan nama bandar bagi setiap penerbitan:
{% for p in pubs %} {{ p.city.city_name}} # p.city has been populated in the initial query # ... {% endfor %}
Dengan menggunakan select_related Django, cantuman dalaman boleh dilaksanakan dengan cekap untuk mendapatkan semula data daripada jadual berkaitan, mengurangkan pertanyaan pangkalan data dan meningkatkan prestasi.
Atas ialah kandungan terperinci Bagaimanakah kaedah `select_related` Django boleh digunakan untuk mencapai kesan cantuman dalaman apabila bekerja dengan jadual berkaitan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!