我正在构建一个具有 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'])
请给我一个提示,如何访问页面的父级和祖父级。
您可以使用
__
选择关系。例如:
page = Page.objects.select_related('parent', 'parent__parent').get(slug=self.kwargs['slug'])
将同时缓存
page.parent
和page.parent.parent
.