Django预取相关字段与嵌套的select_related字段



我正在尝试获取团队详细信息以及团队成员的详细信息。所以我预取了链接到employee表和链接到User表的相关team_member表。当我执行代码时。它多次调用用户表。请帮忙。提前谢谢。

#query
queryset = Team.objects.prefetch_related("team_members__employee")
.prefetch_related("team_members__employee__user").filter(
team_members__employee__id=employee.id)

#db调用从";leavetracker_;INNER JOIN";leavetracker_;ON("leavetracker_team"8.00
销售支出+
从";leavetracker_;其中";leavetracker_tamember"team_ id";在(16(0.00
销售支出+
从";leavetracker_employee";其中";leavetracker_employee"id";在(2,6,7,10,12(0.00
销售支出+
从";core_user";其中";core_user"电子邮件";在('mohammedismailfayeez@gmail.com','dhanush@gmail.com','fayeezmohammed@gmail.com','rajini@gmail.com','vijay@gmail.com'(8.00
销售支出+
从";leavetracker_employee";限制10002个类似的查询。复制了2次。7.99
销售支出+
从";core_user";其中";core_user"电子邮件"="vjs@gmail.com'限制2119个类似的查询。复制了2次。0.00
销售支出+
从";core_user";其中";core_user"电子邮件"="maj@gmail.com'限制2119个类似的查询。复制了2次。7.99
销售支出+
从";core_user";其中";core_user"电子邮件"="vijay@gmail.com'限制2119个类似的查询。复制了2次。0.00
销售支出+
从";core_user";其中";core_user"电子邮件"="dhanush@gmail.com'限制2119个类似的查询。复制了2次。

为了改进预取,您可以在TeamMember中执行select_related,如下所示:

from django.db.models import Prefetch
Team.objects.prefetch_related(
Prefetch(
"team_members",
queryset=TeamMembers.objects.select_related("employee__user")
)
)

最新更新