Экземпляр StreamBlock выдает исключение "AttributeError: у объекта" str "нет атрибута" блок ""
Я использую пример проекта, предоставленного Wagtail. StreamField получает в качестве аргумента A DemoStreamBlock
class DemoStreamBlock(StreamBlock):
h2 = CharBlock(icon="title", classname="title")
h3 = CharBlock(icon="title", classname="title")
h4 = CharBlock(icon="title", classname="title")
intro = RichTextBlock(icon="pilcrow")
paragraph = RichTextBlock(icon="pilcrow")
aligned_image = ImageBlock(label="Aligned image", icon="image")
pullquote = PullQuoteBlock()
aligned_html = AlignedHTMLBlock(icon="code", label='Raw HTML')
document = DocumentChooserBlock(icon="doc-full-inverse")
Затем в классе Page я создаю экземпляр переменной, например
class BlogPost(Page):
blog_text = StreamField(DemoStreamBlock())
content_panels = Page.content_panels + [
StreamFieldPanel('blog_text')
]
В первый раз, когда я запускаю миграцию, Django не хочет, чтобы я указывал значение по умолчанию из-за необнуляемого поля, которое я добавляю. Однако, если я хочу добавить другое поле StreamField, мне предлагается добавить значение по умолчанию:
class BlogPost(Page):
blog_text = StreamField(DemoStreamBlock())
blog_short_text = StreamField(DemoStreamBlock())
content_panels = Page.content_panels + [
StreamFieldPanel('blog_text'),
StreamFieldPanel('blog_short_text'),
]
Вы пытаетесь добавить необнуляемое поле blog_short_text в blogpost без значения по умолчанию; мы не можем этого сделать (базе данных нужно что-то для заполнения существующих строк). Пожалуйста, выберите исправление:
1) Укажите одноразовое значение по умолчанию (будет установлено для всех существующих строк с> нулевым значением для этого столбца)
2) Выйти, и позвольте мне добавить значение по умолчанию в models.py
Я выбираю 1, а затем введите строковое значение, например "Заголовок блога"
Когда я запускаю./manage.py makemigrations, миграция создается успешно:
class Migration(migrations.Migration):
dependencies = [
('home', '0012_auto_20171023_1343'),
]
operations = [
migrations.AddField(
model_name='blogpost',
name='blog_short_text',
field=wagtail.wagtailcore.fields.StreamField((('h2',
wagtail.wagtailcore.blocks.CharBlock(classname='title',
icon='title')),
('h3',wagtail.wagtailcore.blocks.CharBlock(classname='title',
icon='title')), ('h4',
wagtail.wagtailcore.blocks.CharBlock(classname='title',
icon='title')), ('intro',
wagtail.wagtailcore.blocks.RichTextBlock(icon='pilcrow')),
('paragraph',
wagtail.wagtailcore.blocks.RichTextBlock(icon='pilcrow')),
('aligned_image',
wagtail.wagtailcore.blocks.StructBlock((('image',
wagtail.wagtailimages.blocks.ImageChooserBlock()),
('caption', wagtail.wagtailcore.blocks.RichTextBlock()),
('alignment', home.models.ImageFormatChoiceBlock())),
icon='image', label='Aligned image')), ('pullquote',
wagtail.wagtailcore.blocks.StructBlock((('quote',
wagtail.wagtailcore.blocks.TextBlock('quote title')),
('attribution', wagtail.wagtailcore.blocks.CharBlock())))),
('aligned_html',
wagtail.wagtailcore.blocks.StructBlock((('html',
wagtail.wagtailcore.blocks.RawHTMLBlock()), ('alignment',
home.models.HTMLAlignmentChoiceBlock())), icon='code',
label='Raw HTML')), ('document',
wagtail.wagtaildocs.blocks.DocumentChooserBlock(icon='doc-
full-inverse'))), default='New blog title'),
preserve_default=False,
),
]
Когда я запускаю./manage.py migrate, я получаю исключение:
путь /virtualenvs/maet_wagtail/lib/python3.6/site-packages/wagtail/wagtailcore/blocks/stream_block.py", строка 257, для дочернего элемента в значении # child является экземпляром StreamChild AttributeError: объект 'str' не имеет атрибута "блок"
Почему я получаю такое исключение? Кроме того, почему я не получаю это в первый раз, но каждый раз, когда я пытаюсь выполнить такую миграцию?