gpt4 book ai didi

python - 如何以编程方式创建 Page 并设置其 StreamField 值?

转载 作者:行者123 更新时间:2023-11-30 22:24:34 24 4
gpt4 key购买 nike

我想在 wagtail 中以编程方式创建 BlogPage,并设置其 StreamField 值。我可以设置 heading 字段。但当我尝试设置 paragraph 字段时,我收到 AttributeError: 'unicode' object has no attribute 'source' 。我也想设置图像。

这是我的 BlogPage 模型。

models.py

class BlogPage(Page):
template = 'wagtail/test_page.html'
author = models.CharField(max_length=255)
date = models.DateField("Post date")
body = StreamField([
('heading', blocks.CharBlock(classname="full title")),
('paragraph', blocks.RichTextBlock()),
('image', ImageChooserBlock()),
])

content_panels = Page.content_panels + [
FieldPanel('author'),
FieldPanel('date'),
StreamFieldPanel('body'),
]

这是我通过运行此脚本来创建页面的代码。

create_page.py

new_image_page = BlogPage(
title='Blog',
slug='michael',
author='michael',
date='2017-12-13',
body=[('heading','New Heading'), ('heading','New Heading 23232'), ('paragraph','My Paragraph')]
)

directory_page = Page.objects.get(slug='home')
directory_page.add_child(instance=new_image_page)
revision = new_image_page.save_revision()
revision.publish()
new_image_page.save()

最佳答案

以编程方式添加 StreamField 数据时,最好以原始 json 字符串形式输入数据。数据将是一个字典数组,其中每个字典包含一个 type 和一个 value

这应该可以解决您遇到的任何字符串转换问题。

import json

new_image_page = BlogPage(
title='Blog',
slug='michael',
author='michael',
date='2017-12-13',
body=json.dumps([
{'type':'heading', 'value': 'New Heading'},
{'type':'heading', 'value': 'New Heading 23232'},
{'type':'paragraph', 'value': '<strong>My Paragraph</strong>'},
])
)

要添加图像,您将执行类似的操作,其中值是图像的 pk (ID)。

{'type': 'image', 'value': my_image.pk},

关于python - 如何以编程方式创建 Page 并设置其 StreamField 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47788080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com