Maison  >  Article  >  base de données  >  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 ?

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
Susan Sarandonoriginal
2024-10-30 08:09:27750parcourir

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>

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>

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>

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>

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!

Déclaration:
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