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()