Wagtail - Как установить значение насыщенного текста во вложенном блоке (StreamField->StructBlock->RichTextBlock)

У меня есть следующая структура:

`class ParagraphWithRelatedLinkBlock(blocks.StructBlock):
    text = blocks.RichTextBlock()
    related_link = blocks.ListBlock(blocks.URLBlock())

class BlogPageSF(Page):
    body = StreamField(
        [
            ("paragraph", ParagraphWithRelatedLinkBlock(),
        ], use_json_field=True
)`

Я хочу установить значение поля 'text' из скрипта или оболочки Django (не через админку Wagtail).

Как я могу это сделать?

Я пытался сделать следующее в shell:

`p = BlogPageSF()
rt = RichTextBlock('Test')
pb = ParagraphWithRelatedLinkBlock()
pb.text = rt
p.body.append(('paragraph', pb))
p.save()`

Я ожидаю, что поле 'text' в ParagraphWithRelatedLinkBlock будет иметь значение 'Test'

Но я получаю ошибку: AttributeError: 'ParagraphWithRelatedLinkBlock' object has no attribute 'items'

Значения, которые вы вставляете в данные StreamField, должны не быть экземплярами класса Block - экземпляры блоков используются только как часть определения потока (например, когда вы пишете text = blocks.RichTextBlock(), вы создаете экземпляр RichTextBlock, который является частью определения ParagraphWithRelatedLinkBlock).

Правильными типами данных являются либо простые значения Python, такие как dict для блока StructBlock, либо специальный тип значения, такой как wagtail.rich_text.RichText для блока RichTextBlock. Так, в случае ParagraphWithRelatedLinkBlock, вам нужно предоставить dict, содержащий значение RichText:

from wagtail.rich_text import RichText

p = BlogPageSF()
p.body.append(('paragraph', {'text': RichText('Test')}))
p.save()
Вернуться на верх