Para mostrar datos de múltiples tablas relacionadas en Django, a menudo es necesaria una unión interna. En este artículo, exploraremos cómo realizar una unión interna usando ORM (Object-Relational Mapper) de Django.
Relaciones de modelos
El archivo models.py en el El código proporcionado define las siguientes relaciones de tabla:
Unión interna usando select_ related
Para lograr un efecto de unión interna, se puede emplear el método select_ related de Django. Preselecciona los objetos relacionados junto con los objetos principales, lo que reduce la cantidad de consultas a la base de datos necesarias para acceder a los datos relacionados.
En views.py, se puede usar el siguiente código para realizar una unión interna:
pubs = publication.objects.select_related('country', 'country_state', 'city')
Inspeccionando el SQL generado
Usando str(pubs.query), se puede inspeccionar la consulta SQL generada. Se parecerá a la consulta SQL proporcionada, con uniones internas entre las tablas:
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" )
Acceso a datos relacionados
Después de la unión interna, el Se puede acceder a los datos relacionados a través de los respectivos atributos del objeto del modelo. Por ejemplo, para mostrar el nombre de la ciudad para cada publicación:
{% for p in pubs %} {{ p.city.city_name}} # p.city has been populated in the initial query # ... {% endfor %}
Al utilizar select_ related de Django, las uniones internas se pueden implementar eficientemente para recuperar datos de tablas relacionadas, lo que reduce las consultas a la base de datos y mejora el rendimiento.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3