"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > How to Perform an Inner Join in Django Using `select_related`?

How to Perform an Inner Join in Django Using `select_related`?

Published on 2024-11-04
Browse:377

How to Perform an Inner Join in Django Using `select_related`?

How to Execute an Inner Join in Django

To showcase the interconnected data from multiple tables in your Django application, you may encounter the need to perform an inner join operation. By leveraging the select_related method, you can effortlessly achieve this.

Consider the following scenario: you want to display a publication's city, state, and country names in an HTML template. However, these details are stored in separate tables. To retrieve this information using an inner join, you can utilize the select_related method as follows:

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

This query will generate an SQL statement similar to the following:

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

The retrieved values will be automatically converted into ORM model instances. This allows you to access the related table values through their respective objects within a loop, as demonstrated below:

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

By employing this technique, you can efficiently fetch data from multiple tables and present interconnected information in your HTML templates, while avoiding additional database hits for pre-selected forward relations.

Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3