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")
    )
)
Вернуться на верх