Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Memaparkan Butiran Bandar, Negeri dan Negara daripada Berbilang Jadual Menggunakan select_related() dalam Django?

Bagaimana untuk Memaparkan Butiran Bandar, Negeri dan Negara daripada Berbilang Jadual Menggunakan select_related() dalam Django?

Susan Sarandon
Susan Sarandonasal
2024-10-30 08:09:27750semak imbas

How to Display City, State, and Country Details from Multiple Tables Using select_related() in Django?

Menyertai Berbilang Jadual untuk Menunjukkan Bandar, Negeri dan Negara di Django

Pengenalan

Pertanyaan pangkalan data selalunya melibatkan penyertaan berbilang jadual untuk mengakses data berkaitan. Dalam Django, gabungan tersebut boleh dicapai menggunakan kaedah select_related(). Artikel ini menunjukkan cara menggunakan select_related() untuk melakukan gabungan dalaman dalam Django dan memaparkan nama bandar, negeri dan negara yang dikaitkan dengan penerbitan.

Menyambungkan Jadual dalam Model

Fail models.py mentakrifkan kelas model pangkalan data untuk jadual yang berbeza:

<code class="python">class Country(models.Model):
    country_name = models.CharField(max_length=200, null=True)

class CountryState(models.Model):
    state_name = models.CharField(max_length=200, null=True)
    country = models.ForeignKey(Country, on_delete=models.CASCADE, null=True)

class City(models.Model):
    city_name = models.CharField(max_length=200, null=True)
    countrystate = models.ForeignKey(CountryState, on_delete=models.CASCADE, null=True)

class Publication(models.Model):
    country = models.ForeignKey(Country, on_delete=models.CASCADE, null=True)
    countrystate = models.ForeignKey(CountryState, on_delete=models.CASCADE, null=True)
    city = models.ForeignKey(City, on_delete=models.CASCADE, null=True)</code>

Mengambil Penerbitan dalam Paparan

Penerbitan() lihat dalam views.py mengambil penerbitan:

<code class="python">def publications(request):
    mypublications = publication.objects.filter(user_id=request.session['account_id'])
    return render(request, 'blog/mypublications.html', {'plist': mypublications})</code>

Melaksanakan Inner Join dengan select_related()

Untuk melakukan inner join, anda boleh menggunakan kaedah select_related() seperti berikut:

<code class="python">pubs = publication.objects.select_related('country', 'country_state', 'city')</code>

Barisan ini bergabung dengan jadual Penerbitan dengan jadual Negara, Negeri dan Bandar dan pramuatnya untuk kegunaan kemudian.

Mengakses Data Berkaitan

Setelah penggabungan dilakukan, anda boleh mengakses data berkaitan melalui objek model. Contohnya, dalam templat:

<code class="html">{% for p in pubs %}
     {{ p.city.city_name}}  # p.city has been populated in the initial query
     # ...
{% endfor %}</code>

Faedah Menggunakan select_related()

  • Mengurangkan bilangan pertanyaan pangkalan data.
  • Diperbaiki prestasi untuk akses objek yang berkaitan.
  • Kesederhanaan dan kebolehbacaan berbanding gabungan SQL mentah.

Atas ialah kandungan terperinci Bagaimana untuk Memaparkan Butiran Bandar, Negeri dan Negara daripada Berbilang Jadual Menggunakan select_related() dalam Django?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn