5

1 つの StreamField 本体と、HeadingBlock という名前のカスタム ブロックを含むページがあります。

class HeadingBlock(blocks.StructBlock):
    heading = blocks.CharBlock()
    cssid = blocks.CharBlock()
    ...

class CustomPage(Page):
    ...
    body = StreamField([
        ('heading', HeadingBlock()),
    ...

HeadingBlock の見出し属性に新しい charblock を追加する必要がありますが、シェルを使用します。

>>> from custom.models import CustomPage
>>> c = CustomPage.objects.all()[0]
>>> c.body[0].heading.value = "hello world" ??? this does not work

誰でも助けることができますか?どうもありがとう!

編集:私は見出しブロックを簡素化し、リストブロックを削除して試しました:

>>> c.body[0].value
StructValue([('heading', u'hi'), ('cssid', u'man')])
>>> type(c.body[0].value)
<class 'wagtail.wagtailcore.blocks.struct_block.StructValue'>
>>> from wagtail.wagtailcore.blocks.struct_block import StructValue
>>> c.body[0].value = StructValue([('heading', u'hello'), ('cssid', u'world')])
>>> c.save()

しかし、管理インターフェイスに入ると、フィールドは空です。私は試した:

>>> c.body[0].block.child_blocks
OrderedDict([('heading', <wagtail.wagtailcore.blocks.field_block.CharBlock object at 0x7f4c2aaf9790>), ('cssid', <wagtail.wagtailcore.blocks.field_block.CharBlock object at 0x7f4c2aaf9a90>)])
>>> c.body[0].block.child_blocks['heading']
<wagtail.wagtailcore.blocks.field_block.CharBlock object at 0x7f4c2aaf9790>
>>> c.body[0].block.child_blocks['heading'].value
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'CharBlock' object has no attribute 'value'

何も起こりません。これはそれほど難しいことではないと思います :-|

4

1 に答える 1