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()
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!