На домашней странице и странице поиска я хотел бы перечислить все виды страниц с различным подробным отображением. Я написал код, приведенный ниже следующий документ:Как запросить подклассы страницы в wagtail?
from wagtail.wagtailcore.models import Page
from my.models import ArticlePage, GalleryPage, VideoPage, SharedLinkPage
PAGE_TYPES = (ArticlePage, GalleryPage, VideoPage, SharedLinkPage,)
class HomePage(Page):
subpage_types = list(PAGE_TYPES)
def get_context(self, request):
context = super(HomePage, self).get_context(request)
context['posts'] = Page.objects.type(PAGE_TYPES).live()
context['recent_posts'] = Page.objects.type(PAGE_TYPES).live()
return context
В этом случае я могу получить только [<Page: 1>, <Page:2>]
, что я действительно хочу [<ArticlePage: 1>, <GalleryPage:2>]
.
Мой вопрос такой же страница поиска, но с search
запросом:
Page.search('something', ArticlePage)
был бы лучше:
search_backend.search('something').types(PAGE_TYPES).live()
Просто крошечное коррекционно - версию PageQuerySet из 'specific' будет выполнять один дополнительный запрос для каждого отдельного типа страницы, которая существует в QuerySet. Ваша точка по-прежнему стоит, но это все равно намного лучше, чем называть «конкретную» на каждой странице отдельно. – gasman
@gasman исправляет, что нужно будет сделать соединение, чтобы добавить дополнительную информацию из каждой таблицы подстраниц. Я немного отредактировал ответ, чтобы это отразить. – Serafeim