如何在django中获取queryset的所有子节点?

was*_*lli 4 python django django-queryset

我有一个查询集结果,比如动物,它有一个动物列表.有动物的子类别,我想得到所有的子类别.即

对于单一动物,我可以使用animal.categories哪种作品.现在,我想以某种方式这样做:

categories = animals.categories
Run Code Online (Sandbox Code Playgroud)

动物是查询集.我怎样才能做到这一点?

Bur*_*lid 9

没有迭代查询集是没有办法的,但您可以使用它prefetch_related来加快速度:

all_animals = Animals.objects.prefetch_related('categories')
categories = [animal.categories.all() for animal in all_animals]
Run Code Online (Sandbox Code Playgroud)


sch*_*cki 5

有两种选择:

1)完全按照你的问题,你只能这样做:

categories=[]
for aninmal in animals:
    categories.extend(animal.categories.all())
Run Code Online (Sandbox Code Playgroud)

2)但是,我会运行一个类似的类别的新查询(我不知道你的确切数据模型和措辞,但我认为你明白了)

categories=Category.filter(animals__in=animals).all()
Run Code Online (Sandbox Code Playgroud)