Django join query using foreignkey
select locations.name,regions.region_name
from locations
inner join regions on locations.region_id = regions.id
order by locations.name;
Как сделать этот запрос в Django? Я хочу показать имя страны-региона в теге select, например, chennai-india
Вы можете получить это с помощью:
mylocation.region.region_name
с mylocation
объектом Location
, но это сделает дополнительный запрос для получения региона.
Вы можете повысить эффективность с помощью .select_related(…)
[Django-doc]:
locations = Location.objects.select_related('region').order_by('name')
В этом случае данные для .region
будут загружены в том же запросе.
Примечание: обычно модели Django дается сингулярное имя, поэтому
Location
вместо.Locations
Примечание: Обычно поля модели не имеют префикса с именем модели. Это делает запросы более длинными для чтения, и часто хотят использовать наследование (абстрактных) моделей для наследовать поля, поэтому использование префикса сделает их менее пригодными для повторного использования. Поэтому лучше переименовать ваше поле
вregion_name
name
.