在多个应用中使用流字段:迁移错误



我的鹡鸰网站项目被拆分为不同的应用程序,如coreeventpublications等,我在core.models中设置了我的流场。

现在我想不仅在core.models中重用这个流域,而且在event.models中重用这个流域。

但是,定义

我的流域(子类化StreamBlock)一次并在我的所有应用程序中重用它的最优雅(干)方法是什么?

我的StreamBlock灵感来自鹡鸰演示项目的灵感:

# core/models.py
class StoryBlock(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")
    pullquote = PullQuoteBlock()
    read_on = ReadOnBlock()

-

# event/models.py
from wagtail.wagtailcore.fields import StreamField
from wagtail.wagtailadmin.edit_handlers import FieldPanel, StreamFieldPanel
from core.models import StoryBlock
class EventIndexPage(Page):
    body = StreamField(StoryBlock())
    content_panels = Page.content_panels + [
        StreamFieldPanel('body'),
    ]

但是尝试makemigrations更新的EventIndexPage页面模型会产生一个警告,表明我正在trying to add a non-nullable field 'body' to eventindexpage without a default - 但这只发生在非core模型上的(流)字段上。

传递请求的默认值(无论是"asdf"还是"[]")以makemigrations生成迁移文件,但以下migrate失败:

$ python manage.py migrate
...
  File "/myproject/venv/lib/python3.5/site-packages/wagtail/wagtailcore/fields.py", line 90, in get_prep_value
    return json.dumps(self.stream_block.get_prep_value(value), cls=DjangoJSONEncoder)
  File "/myproject/venv/lib/python3.5/site-packages/wagtail/wagtailcore/blocks/stream_block.py", line 205, in get_prep_value
    for child in value  # child is a BoundBlock instance
  File "/myproject/venv/lib/python3.5/site-packages/wagtail/wagtailcore/blocks/stream_block.py", line 205, in <listcomp>
    for child in value  # child is a BoundBlock instance
AttributeError: 'str' object has no attribute 'block'

完整回溯

如果这与我的问题有关:这个项目将被部署到openshift,所以我在使用Python 3时仅限于Django 1.8。很高兴使用鹡鸰 1.5。

正如

gasman在他的评论中指出的那样,使用""作为迁移的默认值就可以了。

最新更新