Python 为queryset中的每个实例获取FK集

Python 为queryset中的每个实例获取FK集,python,django,Python,Django,我有一个类似于Django的树模型,称为a,由Django mptt完成 class A(MPTTModel): parent = TreeForeignKey('self') 这个类自动具有“children”管理器,因此我可以很容易地获得子树 还有另一个模型,其FK链接到: class SomeModel(models.Model): link_to_a = models.ForeignKey(A) 我知道,如果我想获得实例的某个模型集,我可以这样做: a = A.obj

我有一个类似于Django的树模型,称为a,由Django mptt完成

class A(MPTTModel):
    parent = TreeForeignKey('self')
这个类自动具有“children”管理器,因此我可以很容易地获得子树

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

class SomeModel(models.Model):
    link_to_a = models.ForeignKey(A)
我知道,如果我想获得实例的某个模型集,我可以这样做:

a = A.objects.filter(blah)
a.somemodel_set.all()
问题是: 获取模型下某个查询集中每个实例的somemodel_集的最具python风格的方法是什么,即我想要4个示例:

some_A_instance.children.all().get_all_somemodel_instances()
和get_all_somemodel_instances()应检索每个子级的ziped queryset集

这应执行以下操作:

[child.somemodel_set.all() for child in some_A_instance.children.all()]
这应该做到:

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

您是只需要一个列表中的相关项,还是需要将每个集合与其父集合相关联?如果是前者,您可以通过以下方法一次获取所有信息:

related_items = SomeModel.objects.filter(link_to_a=some_A_instance.children.all())
它将执行一个查询(带有一个子查询)来获取所有内容

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

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

您是只需要一个列表中的相关项,还是需要将每个集合与其父集合相关联?如果是前者,您可以通过以下方法一次获取所有信息:

related_items = SomeModel.objects.filter(link_to_a=some_A_instance.children.all())
它将执行一个查询(带有一个子查询)来获取所有内容

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

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

这是列表的输出,我需要像QuerySet一样的惰性对象。输出是QuerySet对象的列表。这是列表的输出,我需要像QuerySet一样的惰性对象。输出是QuerySet对象的列表。