首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在编辑页面时添加content_panels

如何在编辑页面时添加content_panels
EN

Stack Overflow用户
提问于 2019-08-09 03:37:58
回答 1查看 203关注 0票数 0

我正在开发我的摇尾博客网站。我想添加SnippetChooserPanel动态显示的特性。当我创建博客编辑页面时,我想编辑1/3的SnippetChooserPanel。当我编辑博客编辑页面时,我想编辑3/3的SnippetChooserPanel。

但是,我无法解决.

  1. 我在博客/Models.py中删除了2个SnippetChooserPanel、"B“和"C”。我只能编辑"A“SnippetChooserPanel -> --没关系。
  2. 我在博客/wagtail_hooks.py ->中添加了代码,但是SnippetChooserPanel看不到。

它是博客/模型。

代码语言:javascript
复制
content_panels = Page.content_panels + [
        MultiFieldPanel(
            [
                SnippetChooserPanel("A"),
                # SnippetChooserPanel("B"),
                # SnippetChooserPanel("C"),
            ],
            heading=_("ABC information"),
        ),
    ]

它是由2和blog/wagtail_hooks.py组成的过程。如果我加了

代码语言:javascript
复制
@hooks.register("before_edit_page")

...
...

Page.content_panels = Page.content_panels + [
        MultiFieldPanel(
            [
                SnippetChooserPanel("B"),
                SnippetChooserPanel("C"),
            ],
            heading=_("ABC more information"),
        ),
    ]

...
...

我做得不好..。有人能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-09 07:10:28

我有一个类似的问题,并找到了一个解决办法,虽然这可能不是理想的一个。

wagtail/contrib/modeladmin/options.py中,我读到:

代码语言:javascript
复制
class ModelAdmin(WagtailRegisterable):

    def get_edit_handler(self, instance, request):
        """
        Returns the appropriate edit_handler for this modeladmin class.
        edit_handlers can be defined either on the model itself or on the
        modeladmin (as property edit_handler or panels). Falls back to
        extracting panel / edit handler definitions from the model class.
        """
        if hasattr(self, 'edit_handler'):
            edit_handler = self.edit_handler
        elif hasattr(self, 'panels'):
            panels = self.panels
            edit_handler = ObjectList(panels)
        …
        return edit_handler

因此,您可以重写该get_edit_handler来决定要返回的内容。如果这是一个create视图,实例将为null,否则它将具有一个id。

代码语言:javascript
复制
# wagtail_hooks.py
from wagtail.contrib.modeladmin.options import ModelAdmin
from wagtail.admin.edit_handlers import ObjectList

class BlogAdmin(ModelAdmin):
    model = Blog

    def get_edit_handler(self, instance, request):
        panels = instance.create_panels
        if instance.pk:
            panels += instance.edit_panels
        return ObjectList(panels)


# models.py

class Blog(Page):

    create_panels = [
        SnippetChooserPanel("A"),
    ]
    edit_panels = [
        SnippetChooserPanel("B"),
        SnippetChooserPanel("C"),
    ]

就这样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57423182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档