[英]Wagtail - How to set rich text value in nested block (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
)`
我想从脚本或 Django shell 设置“文本”字段的值(不是通过 Wagtail 管理站点)。
我怎样才能做到这一点?
我曾尝试在 shell 中执行以下操作:
`p = BlogPageSF()
rt = RichTextBlock('Test')
pb = ParagraphWithRelatedLinkBlock()
pb.text = rt
p.body.append(('paragraph', pb))
p.save()`
我希望 ParagraphWithRelatedLinkBlock 中的“文本”字段的值为“测试”
但我收到错误:AttributeError: 'ParagraphWithRelatedLinkBlock' object has no attribute 'items'
您插入 StreamField 数据的值不应是 Block class 的实例 - 块实例仅用作 stream 定义的一部分(例如,当您编写text = blocks.RichTextBlock()
时,您正在创建 RichTextBlock 的实例ParagraphWithRelatedLinkBlock
定义的 forms 部分)。
正确的数据类型要么是简单的 Python 值,例如 StructBlock 的dict
,要么是专用值类型,例如 RichTextBlock 的wagtail.rich_text.RichText
。 因此,对于 ParagraphWithRelatedLinkBlock,您需要提供一个包含 RichText 值的字典:
from wagtail.rich_text import RichText
p = BlogPageSF()
p.body.append(('paragraph', {'text': RichText('Test')}))
p.save()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.