Maison > base de données > tutoriel mysql > le corps du texte

Comment afficher les détails de la ville, de l'état et du pays à partir de plusieurs tables à l'aide de select_rated() dans Django ?

Susan Sarandon
Libérer: 2024-10-30 08:09:27
original
803 Les gens l'ont consulté

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

Joindre plusieurs tables pour afficher la ville, l'état et le pays dans Django

Introduction

Les requêtes de base de données impliquent souvent de joindre plusieurs tableaux pour accéder aux données associées. Dans Django, de telles jointures peuvent être réalisées en utilisant la méthode select_rated(). Cet article montre comment utiliser select_rated() pour effectuer une jointure interne dans Django et afficher le nom de la ville, de l'état et du pays associés à une publication.

Connexion des tables dans les modèles

Le fichier models.py définit les classes de modèles de base de données pour les différentes tables :

<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>
Copier après la connexion

Récupération des publications dans une vue

Les publications() view in views.py récupère les publications :

<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>
Copier après la connexion

Effectuer une jointure interne avec select_rated()

Pour effectuer la jointure interne, vous pouvez utiliser la méthode select_rated() comme suit :

<code class="python">pubs = publication.objects.select_related('country', 'country_state', 'city')</code>
Copier après la connexion

Cette ligne joint la table Publication aux tables Country, CountryState et City et les précharge pour une utilisation ultérieure.

Accès aux données associées

Une fois la jointure effectuée, vous pouvez accéder aux données associées via les objets du modèle. Par exemple, dans un modèle :

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

Avantages de l'utilisation de select_rated()

  • Nombre réduit de requêtes de base de données.
  • Amélioration performances pour l'accès aux objets associés.
  • Simplicité et lisibilité par rapport aux jointures SQL brutes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal