Получить все дочерние элементы типа базовой страницы - PullRequest
1 голос
/ 07 мая 2019

Я работаю над приложением Wagtail, которое имеет несколько различных типов страниц RawHTMLLandingPage, MarketingLandingPage и т. Д., Которые являются дочерними элементами базовой страницы, LandingPageBase.

Если я правильно понимаю, тип дочерней страницызнает, что это за родительский тип.Но возможно ли, чтобы родитель знал программно о своих дочерних элементах?

Когда мы запрашиваем целевую страницу, мы еще не знаем, какой это тип (кроме «целевой страницы», пока она не попадет на страницу).API и мы запрашиваем базу данных).

class LandingPageBase(Page):
    pass

    def identify_children(self):
        # Can I find out about the two children from this method?
        pass

class RawHTMLLandingPage(LandingPageBase):
    pass


class MarketingLandingPage(LandingPageBase):
    pass

1 Ответ

2 голосов
/ 07 мая 2019

В wagtail.core.models есть функция get_page_models, которая возвращает все классы, которые происходят от Page, поэтому можно отфильтровать этот список только по тем, которые являются подклассами данного родителя:

from wagtail.core.models import get_page_models

class LandingPageBase(Page):
    @classmethod
    def identify_children(cls):
        return [model for model in get_page_models() if issubclass(model, cls)]
...