Django prefetch_related fields с вложенными select_related fields
Я пытаюсь получить данные о команде с данными о членах команды. Поэтому я выбираю таблицу team_member, которая связана с таблицей employee, а та связана с таблицей User. Когда я выполнил код, он вызывает таблицу user несколько раз. Пожалуйста, помогите в этом. Спасибо заранее.
#query
queryset = Team.objects.prefetch_related("team_members__employee")\
.prefetch_related("team_members__employee__user").filter(
team_members__employee__id=employee.id)
#db call
SELECT --- FROM "leavetracker_team" INNER JOIN "leavetracker_teammember" ON ("leavetracker_team". "id" = "leavetracker_teammember". "team_id") WHERE ("leavetracker_teammember". "employee_id" = 7 AND "leavetracker_team". "id" = 16) LIMIT 21
8.00
Sel Expl
+
SELECT --- FROM "leavetracker_teammember" WHERE "leavetracker_teammember". "team_id" IN (16)
0.00
Sel Expl
+
SELECT --- FROM "leavetracker_employee" WHERE "leavetracker_employee". "id" IN (2, 6, 7, 10, 12)
0.00
Sel Expl
+
SELECT --- FROM "core_user" WHERE "core_user". "email" IN ('mohammedismailfayeez@gmail.com', 'dhanush@gmail.com', 'fayeezmohammed@gmail.com', 'rajini@gmail.com', 'vijay@gmail.com')
8.00
Sel Expl
+
SELECT --- FROM "leavetracker_employee" LIMIT 1000
2 похожих запроса. Дублируется 2 раза. 7.99
Sel Expl
+
SELECT --- FROM "core_user" WHERE "core_user". "email" = 'vjs@gmail.com' LIMIT 21
19 похожих запросов. Дублируется 2 раза. 0.00
Sel Expl
+
SELECT --- FROM "core_user" WHERE "core_user". "email" = 'maj@gmail.com' LIMIT 21
19 похожих запросов. Дублируется 2 раза. 7.99
Sel Expl
+
SELECT --- FROM "core_user" WHERE "core_user". "email" = 'vijay@gmail.com' LIMIT 21
19 похожих запросов. Дублируется 2 раза. 0.00
Sel Expl
+
SELECT --- FROM "core_user" WHERE "core_user". "email" = 'dhanush@gmail.com' LIMIT 21
19 похожих запросов. Продублировано 2 раза.
Для улучшения предварительной выборки вы можете сделать select_related
в TeamMember следующее:
from django.db.models import Prefetch
Team.objects.prefetch_related(
Prefetch(
"team_members",
queryset=TeamMembers.objects.select_related("employee__user")
)
)