Экземпляр 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' не имеет атрибута "блок"

Почему я получаю такое исключение? Кроме того, почему я не получаю это в первый раз, но каждый раз, когда я пытаюсь выполнить такую ​​миграцию?

0 ответов

Другие вопросы по тегам