删除 Streamfield 块时发生 Wagtail 迁移错误

Wagtail Migration error when removing Streamfield block

我有一个基于 SnippetChooserBlock 的 Streamfield 块,我删除了它,这很好,迁移也很好。

('call_to_action_snippet', SnippetChooserBlock(CallToActionSnippet,icon="success",template='myapp/blocks/cta_snippet.html')),

当我随后尝试从我的模型中删除 CallToActionSnippet 时,当 运行 从较旧的迁移文件中进行迁移时,我收到错误消息:

AttributeError: 'module' object has no attribute 'CallToActionSnippet'

知道我做错了什么吗?我知道如果 SF 自定义块基于某些块类型,则无法删除它们,但我认为 SnippetChooserBlock 就可以了。

谢谢

乔斯

问题不直接出在 SnippetChooserBlock 上,而是出在你的片段 CallToActionSnippet 上,我想你删除了它?

如果您查看最初创建此 Streamfield 的迁移,您应该会看到类似 wagtail.wagtailsnippets.blocks.SnippetChooserBlock(yourapp.snippets.CallToActionSnippet) 的内容。但是,由于您删除了该代码段,因此当迁移尝试加载时失败。

SnippetChooserBlock 的目标模型可以作为 appname.modelname 类型字符串(稍后为 lazily loaded)传递。因此,与其在迁移中将模型实例传递给 wagtail.wagtailsnippets.blocks.SnippetChooserBlock,不如将其编辑为传递字符串 'yourapp.CallToActionSnippet'.