Django queryset select all from multiple tables
Я хочу выбрать все столбцы из объединения нескольких таблиц, используя django queryset, соответствующий следующему sql
select user.*, address.*, contact.* from user left join address on user.id = address.userid left join contact on user.id = contact.userid
У меня есть следующий python
User.objects.values()
для получения всех данных пользователя.
User.objects.values(first_name, last_name, contacts__number, addresses__zip)
для получения определенных столбцов
Но я не знаю, как получить все столбцы из всех 3 таблиц, что-то вроде
User.objects.values(*, contacts__*, addressess__*)
Если вы определили отношения ForeignKey
на классе User
, вы можете использовать:
users = User.objects.select_related("Address", "Contact").all()
Затем вы можете получить доступ к связанному объекту на объекте User
в качестве атрибута:
for user in users:
print(user.address)
print(user.contact)
На самом деле, подсказка select_related()
не нужна, и вы можете получить доступ к связанной записи как к атрибуту в любом случае, она просто предотвращает отдельный запрос к базе данных для каждого доступа.
Если вы используете модель User
в приложении Django auth, вы можете пойти одним из этих путей для достижения вашей цели:
Присоедините модель в качестве профиля к модели DJango
.User
: https://docs.djangoproject.com/en/4.1/topics/auth/customizing/#extending-the-existing-user-modelЗамените модель по умолчанию
.User
своей собственной моделью: https://docs.djangoproject.com/en/4.1/topics/auth/customizing/#substituting-a-custom-user-modelИспользуйте "обратные" запросы отношений: https://docs.djangoproject.com/en/4.1/topics/db/queries/#lookups-that-span-relationships
.
Надеюсь, это решит вашу проблему.