我有一个类似于树的Django模型,名为A,由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()应为每个子项检索ziped的集合查询集
答案 0 :(得分: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')
答案 1 :(得分:0)
这应该做:
[child.somemodel_set.all() for child in some_A_instance.children.all()]