Mysql
 sql >> Database >  >> RDS >> Mysql

Come creare un Inner Join in django?

Probabilmente stai cercando select_related , che è il modo naturale per raggiungere questo obiettivo:

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

Puoi controllare l'SQL risultante tramite str(pubs.query) , che dovrebbe generare un output lungo le seguenti linee (l'esempio proviene da un backend di 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" ) 

I valori del cursore restituiti vengono quindi tradotti nelle istanze del modello ORM appropriate, in modo che quando si esegue il ciclo su queste pubblicazioni, si accede ai valori delle tabelle correlate tramite i propri oggetti. Tuttavia, questi accessi lungo le relazioni in avanti preselezionate non causeranno ulteriori accessi al db:

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