因为我需要避免递归导入,并以Group
对象作为查询的起点(这就是为什么我不能直接导入Action
对象的原因)。
关系为Group
-> Component
-> ComponentVersion
-> Action
例如,Group.components.all()
返回查询集中的所有组件。
另外[component.versions.all() for component in Group.components.all()]
返回查询集的列表,其结果是所有版本。随后,.actions.all()
将为理解中返回的每个actions
返回ComponentVersion
的所有查询集。
执行此操作的最佳方法是避免对数据库进行不必要的调用并提高可读性?
答案 0 :(得分:1)
Prefetch Related从这里开始,这将运行4个查询,但是将立即检索所有数据,而不会进行迭代和多次查询。
Group.objects.all().prefetch_related('components', 'components__versions', 'components__versions__actions')