Django请求select_related如何访问祖父母

问题描述 投票:0回答:1

我正在构建一个具有 3 级页面层次结构的网站,所以我的页面模型有一个外键,指的是它自己:

class Page(models.Model):       
    ...    
    parent = models.ForeignKey('self', on_delete=models.SET_NULL, 
               blank=True, null=True, 
               related_name='subpages', related_query_name='subs')

当我在我的 PageDetailView 中获取一个页面时,我想通过它的父级(如果有的话)和祖父级(如果父级有它的父级)来获取它。如果我只需要一个父母,那就很简单了:

page = Page.objects.select_related('parent').get(slug=self.kwargs['slug'])

但我还需要选择相关的“父母的父母”。我不知道该怎么做。它可能如下所示:

page = Page.objects.select_related(
             'parent',
              Page.objects.select_related('parent' as 'grandparent')
                           ).get(slug=self.kwargs['slug'])

请给我一个提示,如何访问页面的父级和祖父级。

django parent detailview
1个回答
0
投票

您可以使用

__
选择关系。例如:

page = Page.objects.select_related('parent', 'parent__parent').get(slug=self.kwargs['slug'])

将同时缓存

page.parent
page.parent.parent
.

© www.soinside.com 2019 - 2024. All rights reserved.