如何为StreamField默认值指定嵌套块?

问题描述 投票:0回答:1

我正在使用 Wagtail/CodeRedCMS 为非营利组织开发一个网站。我有一个继承自

EventPage
的自定义
CoderedEventPage
类。我想使用一组默认的嵌套块预先填充新的事件页面:
Body
->
Responsive Grid Row
->
Column
->
Text
。我了解到,可以通过在
default
对象上设置
StreamField
属性来实现这一点,并且我已经能够成功地使用它来预填充单个子块。但是,我不知道如何让它适用于嵌套结构。

我在

EventPage
班中已经了解了以下内容:

body = StreamField(
    LAYOUT_STREAMBLOCKS,
    null=True,
    blank=True,
    use_json_field=True,
    default=[
        ("row", {
            "content": [
                ("text", {"value":"foobar"})
            ]
        })
    ]
)

这不会像我尝试过的其他一些

default
值那样抛出错误,但它只起作用了一半。

在管理界面中添加新的事件页面时我期望/希望看到什么: 带有预先填充正文的新活动页面

我使用上面的代码看到了什么: 带有部分填充正文的新活动页面

响应式网格行是预先填充的,这是部分成功的,但列和文本框不是。我知道我的

default
值不太正确,但我似乎无法理解如何正确指定它。如有任何帮助,我们将不胜感激。

wagtail wagtail-streamfield wagtail-admin
1个回答
0
投票

你想让基本结构看起来像这样,但看起来这还是有点问题。

body = StreamField(
        LAYOUT_STREAMBLOCKS,
        null=True,
        blank=True,
        use_json_field=True,
        default=[
            ("row", {
                "content": [
                    ("content", {"content": [("text", "Foobar")]})
                ]
            })
        ]
    )

特别是,您需要考虑 GridBlock、ColumnBlock 以及其中的每个 Streamblock。

此外,流块似乎需要格式为 {"type": "...", "value": "..."} 的流子默认值

body = StreamField(
        LAYOUT_STREAMBLOCKS,
        null=True,
        blank=True,
        use_json_field=True,
        default=[
            {
                "type": "row",
                "value": {
                    "content": [
                        {
                            "type": "content",
                            "value": {
                                "column_size": "",
                                "content": [
                                    {
                                        "type": "text",
                                        "value": "Foobar"
                                    }
                                ],
                            }
                        }
                    ],
                }
            }
        ]
    )
© www.soinside.com 2019 - 2024. All rights reserved.