Python django在树状表中选择与预取相关的\u

Python django在树状表中选择与预取相关的\u,python,django,django-models,parent,hierarchy,Python,Django,Django Models,Parent,Hierarchy,我有一个这样的模型: class Category(models.Model): name = models.CharField(max_length=20) parent = models.ForeignKey('self', null=True) 我进行以下查询: categories = Category.objects.filter(name__contains=something) 我想预选两级以上的家长。 因此,我将能够迭代它们并执行 category.parent.

我有一个这样的模型:

class Category(models.Model):
   name = models.CharField(max_length=20)
   parent = models.ForeignKey('self', null=True)
我进行以下查询:

categories = Category.objects.filter(name__contains=something)
我想预选两级以上的家长。 因此,我将能够迭代它们并执行

category.parent.parent
没有额外的疑问

在SQL中,这相当于两次使用同一个表进行左连接。
如何在django ORM中执行此操作?

如果您使用的是
category.parent.parent
,则将外键向前移动两次。因此,您可以使用
选择\u related

Category.objects.filter(name__contains=something).select_related('parent__parent')
如果您正在向后跟踪外键(即获取类别的子项),则与预取相关的将非常有用


您可能需要查看是否存储类别树。它可能会使其他查询更高效。

如果使用的是
category.parent.parent
,则会将外键向前移动两次。因此,您可以使用
选择\u related

Category.objects.filter(name__contains=something).select_related('parent__parent')
如果您正在向后跟踪外键(即获取类别的子项),则与预取相关的将非常有用

您可能需要查看是否存储类别树。这可能会使其他查询更高效