Pour afficher les données de plusieurs tables liées dans Django, une jointure interne est souvent nécessaire. Dans cet article, nous allons explorer comment effectuer une jointure interne à l'aide de l'ORM (Object-Relational Mapper) de Django.
Relations de modèle
Le models.py dans le le code fourni définit les relations de table suivantes :
Jointure interne utilisant select_rated
Pour obtenir un effet de jointure interne, la méthode select_rated de Django peut être utilisée. Il présélectionne les objets associés ainsi que les objets principaux, réduisant ainsi le nombre de requêtes de base de données requises pour accéder aux données associées.
Dans vues.py, le code suivant peut être utilisé pour effectuer une jointure interne :
pubs = publication.objects.select_related('country', 'country_state', 'city')
Inspection du code SQL généré
En utilisant str(pubs.query), la requête SQL générée peut être inspectée. Elle ressemblera à la requête SQL fournie, avec des jointures internes entre les tables :
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" )
Accès aux données associées
Après la jointure interne, le les données associées sont accessibles via les attributs d'objet de modèle respectifs. Par exemple, pour afficher le nom de la ville pour chaque publication :
{% for p in pubs %} {{ p.city.city_name}} # p.city has been populated in the initial query # ... {% endfor %}
En utilisant select_rated de Django, les jointures internes peuvent être implémentées efficacement pour récupérer les données des tables associées, réduisant ainsi les requêtes de base de données et améliorant les performances.
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