sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo hacer una unión interna en Django?

Probablemente esté buscando select_related , que es la forma natural de lograr esto:

pubs = publication.objects.select_related('country', 'country_state', 'city')

Puede verificar el SQL resultante a través de str(pubs.query) , lo que debería dar como resultado una salida a lo largo de las siguientes líneas (el ejemplo es de un backend de postgres):

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" ) 

Los valores de cursor devueltos luego se traducen a las instancias del modelo ORM apropiado, de modo que cuando recorre estas publicaciones, accede a los valores de las tablas relacionadas a través de sus propios objetos. Sin embargo, estos accesos a lo largo de las relaciones de reenvío preseleccionadas no generarán visitas adicionales a la base de datos:

{% for p in pubs %}
     {{ p.city.city_name}}  # p.city has been populated in the initial query
     # ...
{% endfor %}