У меня есть абстрактная модель Wagtail с несколькими StreamField
. Два из этих StreamField
s находятся на отдельной вкладке в виде администратора, которые добавляются к edit_handler
.Каков правильный способ расширения абстрактных моделей Wagtail с дополнительными полями?
class AbstractHomePage(Page):
body = StreamField(
HomePageStreamBlock(),
default=''
)
headingpanel = StreamField(
HeadingPanelStreamBlock(),
default=''
)
sidepanel = StreamField(
SidePanelStreamBlock(),
default=''
)
class Meta:
abstract = True
search_fields = Page.search_fields + [index.SearchField('body')]
content_panels = Page.content_panels + [
StreamFieldPanel('body'),
]
pagesection_panels = [
StreamFieldPanel('headingpanel'),
StreamFieldPanel('sidepanel'),
]
edit_handler = TabbedInterface([
ObjectList(content_panels),
ObjectList(pagesection_panels, heading='Page sections'),
ObjectList(Page.promote_panels),
ObjectList(Page.settings_panels, classname='settings'),
])
Я хочу расширить эту модель и добавить поле:
class Foo(AbstractHomePage):
extra = models.TextField()
Meta:
verbose_name='Foo'
content_panels = [
AbstractHomePage.content_panels[0], # title
FieldPanel('extra'),
AbstractHomePage.content_panels[-1] # streamfield
]
При добавлении новой страницы Foo, только поля, доступные в админ-панели являются поля из AbstractHomePage
. Добавленное поле не доступно, пока я не обновлять Foo
«s edit_handler
:
class Foo(AbstractHomePage):
extra = models.TextField()
Meta:
verbose_name='Foo'
content_panels = [
AbstractHomePage.content_panels[0], # title
FieldPanel('extra'),
AbstractHomePage.content_panels[-1] # streamfield
]
edit_handler = TabbedInterface([
ObjectList(content_panels),
ObjectList(AbstractHomePage.pagesection_panels, heading='Page sections'),
ObjectList(Page.promote_panels),
ObjectList(Page.settings_panels, classname='settings'),
])
А теперь мой вопрос: Я сделал что-то неправильно или не следовали надлежащей практике кодирования?
Если мне нужно обновить edit_handler
для каждой расширяемой модели, есть ли лучший способ сделать это? Чтобы убедиться, что новые поля для моделей, расширяющих AbstractHomePage
, получают явный блок «шаблона» edit_handler
каждый раз, когда он чувствует себя действительно уродливым. Я рассматриваю это как серьезное нарушение принципа СУХОЙ.