Comment exécuter une jointure interne dans Django
Pour présenter les données interconnectées de plusieurs tables dans votre application Django, vous pourriez rencontrer le besoin pour effectuer une opération de jointure interne. En tirant parti de la méthode select_rated, vous pouvez y parvenir sans effort.
Considérez le scénario suivant : vous souhaitez afficher les noms de ville, d'état et de pays d'une publication dans un modèle HTML. Cependant, ces détails sont stockés dans des tableaux séparés. Pour récupérer ces informations à l'aide d'une jointure interne, vous pouvez utiliser la méthode select_rated comme suit :
pubs = publication.objects.select_related('country', 'country_state', 'city')
Cette requête générera une instruction SQL similaire à la suivante :
SELECT "publication"."id", "publication"."title", ..., "country"."country_name", ...
FROM "publication"
INNER JOIN "country" ON ( "publication"."country_id" = "country"."id" )
INNER JOIN "countrystate" ON ( "publication"."countrystate_id" = "countrystate"."id" )
INNER JOIN "city" ON ( "publication"."city_id" = "city"."id" )
Les valeurs récupérées seront automatiquement converties en instances de modèle ORM. Cela vous permet d'accéder aux valeurs de table associées via leurs objets respectifs dans une boucle, comme illustré ci-dessous :
{% for p in pubs %}
{{ p.city.city_name}} # p.city has been populated in the initial query
# ...
{% endfor %}
En employant cette technique, vous pouvez extraire efficacement des données de plusieurs tables et présenter des informations interconnectées dans vos modèles HTML, tout en évitant des accès supplémentaires à la base de données pour les relations avancées présélectionnées.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3