Django中如何链式使用select_related关联多模型?
三级模型关联查询的正确写法
你之前的代码已经实现了notifications与task模型的关联查询:
notificationsx = notifications.objects.filter(orgid__in=t).select_related('task').all()
要进一步关联task对应的projects模型,不能用链式调用select_related('project')——因为project是task模型的外键,并非notifications的直接关联字段,且多次调用select_related会覆盖之前的关联配置。
正确的写法是在select_related中通过双下划线指定跨层级的关联路径,一次性关联task和task对应的project:
notificationsx = notifications.objects.filter(orgid__in=t).select_related('task', 'task__project').order_by('-epoch')[:15]
或者更简洁的方式,直接传递完整关联链:
notificationsx = notifications.objects.filter(orgid__in=t).select_related('task__project').order_by('-epoch')[:15]
(注:Django会自动处理关联链上的所有模型,上述两种写法都能确保获取notifications、task和projects的所有字段)
这样就能一次性拉取所需的三级模型数据,避免多次数据库查询,同时实现按epoch倒序取前15条的需求。
内容的提问来源于stack exchange,提问作者kikee1222
相关产品推荐
相关产品推荐

