获取查询集中每个实例的 FK 集



我有一个树状的Django模型,名为A,由django-mptt完成。

class A(MPTTModel):
    parent = TreeForeignKey('self')

这个类自动具有"子"管理器,所以我可以轻松获取子树

还有另一个模型,它有 FK 链接到 A:

class SomeModel(models.Model):
    link_to_a = models.ForeignKey(A)

我知道,如果我想获得 A 实例的某个模型集,我可以这样做:

a = A.objects.filter(blah)
a.somemodel_set.all()

问题是:在 A 模型下获取某个查询集中每个实例somemodel_set的最 pythonic 方法是什么,即我想要 4 个示例:

some_A_instance.children.all().get_all_somemodel_instances()

和 get_all_somemodel_instances() 应该为每个子级检索集合的压缩查询集

您只需要一个列表中的相关项,还是需要将每个集与其父项相关联?如果是前者,您可以通过以下方式一次获得它们:

related_items = SomeModel.objects.filter(link_to_a=some_A_instance.children.all())

这将执行一个查询(带有子查询)来获取所有内容。

否则,您可以使用 prefetch_related() 一次性获取所有项目的相关集:

items = some_A_instance.children.all().prefetch_related('somemodel_set')

这应该可以:

[child.somemodel_set.all() for child in some_A_instance.children.all()]

最新更新