Heim  >  Artikel  >  Datenbank  >  Wie zeige ich Stadt-, Bundesland- und Länderdetails aus mehreren Tabellen mit select_related() in Django an?

Wie zeige ich Stadt-, Bundesland- und Länderdetails aus mehreren Tabellen mit select_related() in Django an?

Susan Sarandon
Susan SarandonOriginal
2024-10-30 08:09:27750Durchsuche

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

Verknüpfen mehrerer Tabellen, um Stadt, Bundesland und Land in Django anzuzeigen

Einführung

Datenbankabfragen erfordern häufig das Verknüpfen mehrerer Tabellen Tabellen, um auf verwandte Daten zuzugreifen. In Django können solche Verknüpfungen mithilfe der Methode select_lated() erreicht werden. In diesem Artikel wird gezeigt, wie Sie mit select_lated() einen Inner Join in Django durchführen und den Namen der Stadt, des Bundeslandes und des Landes anzeigen, die einer Veröffentlichung zugeordnet sind.

Tabellen in Modellen verbinden

Die Datei models.py definiert die Datenbankmodellklassen für die verschiedenen Tabellen:

<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>

Veröffentlichungen in einer Ansicht abrufen

Die Publikationen() Ansicht in Ansichten.py ruft Veröffentlichungen ab:

<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>

Durchführen eines Inner Join mit select_lated()

Um den Inner Join durchzuführen, können Sie die Methode select_lated() verwenden wie folgt:

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

Diese Zeile verknüpft die Publikationstabelle mit den Tabellen „Land“, „CountryState“ und „City“ und lädt sie für die spätere Verwendung vor.

Zugriff auf verwandte Daten

Sobald die Verknüpfung durchgeführt wurde, können Sie über die Modellobjekte auf die zugehörigen Daten zugreifen. Zum Beispiel in einer Vorlage:

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

Vorteile der Verwendung von select_lated()

  • Reduzierte Anzahl von Datenbankabfragen.
  • Verbessert Leistung für den Zugriff auf verwandte Objekte.
  • Einfachheit und Lesbarkeit im Vergleich zu rohen SQL-Joins.

Das obige ist der detaillierte Inhalt vonWie zeige ich Stadt-, Bundesland- und Länderdetails aus mehreren Tabellen mit select_related() in Django an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn