1

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

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

此类自动具有“儿童”管理器,因此我可以轻松获取子树

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

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

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

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() 应该检索每个孩子的压缩查询集

4

2 回答 2

1

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

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')
于 2012-12-10T12:43:12.330 回答
0

这应该这样做:

[child.somemodel_set.all() for child in some_A_instance.children.all()]
于 2012-12-10T12:30:06.033 回答