Как выполнить внутреннее соединение в Django
Чтобы продемонстрировать взаимосвязанные данные из нескольких таблиц в вашем приложении Django, вы можете столкнуться с необходимостью для выполнения операции внутреннего соединения. Используя метод select_related, вы можете легко добиться этого.
Рассмотрим следующий сценарий: вы хотите отобразить названия города, штата и страны публикации в шаблоне HTML. Однако эти сведения хранятся в отдельных таблицах. Чтобы получить эту информацию с помощью внутреннего соединения, вы можете использовать метод select_related следующим образом:
Этот запрос сгенерирует оператор SQL, аналогичный следующему:pubs = publication.objects.select_related('country', 'country_state', 'city')
SELECT "publication"."id", "publication"."title", ..., "country"." название_страны", ...
ИЗ "публикации"
INNER JOIN "country" ON ("publication"."country_id" = "country"."id") )
ВНУТРЕННЕЕ СОЕДИНЕНИЕ "countrystate" ON ("publication"."countrystate_id" = "countrystate"."id")
INNER JOIN "city" ON ( "publication"."city_id" = "city"."id" ) Полученные значения будут автоматически преобразованы в экземпляры модели ORM. Это позволяет вам получать доступ к связанным значениям таблицы через соответствующие объекты в цикле, как показано ниже: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" )
{% for p в пабах %}
{{ p.city.city_name}} # p.city был заполнен в исходном запросе
# ...
{% endfor %}Используя этот метод, вы можете эффективно извлекать данные из нескольких таблиц и представлять взаимосвязанную информацию в ваших шаблонах HTML, избегая при этом дополнительных обращений к базе данных для заранее выбранных прямых связей. Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3