我有一个基于SnippetChooserBlock的Streamfield块我删除了,这很好,迁移很好。
('call_to_action_snippet', SnippetChooserBlock(CallToActionSnippet,icon="success",template='myapp/blocks/cta_snippet.html')),
当我尝试从我的模型中删除CallToActionSnippet时,从旧的迁移文件运行makemigrations时出现错误:
AttributeError: 'module' object has no attribute 'CallToActionSnippet'
我在这里做错了什么想法?我知道如果SF自定义块基于某些块类型而无法删除,但我认为SnippetChooserBlock没问题。
感谢
乔丝
答案 0 :(得分:0)
问题不在于SnippetChooserBlock
,而在于我想要删除的代码CallToActionSnippet
吗?
如果您查看最初创建此Streamfield的迁移,您应该会看到wagtail.wagtailsnippets.blocks.SnippetChooserBlock(yourapp.snippets.CallToActionSnippet)
之类的内容。但是,由于您删除了代码段,因此当迁移尝试加载时,它会失败。
SnippetChooserBlock
的目标模型可以作为appname.modelname
类型字符串(稍后lazily loaded)传递。因此,不要在迁移中将模型实例传递给wagtail.wagtailsnippets.blocks.SnippetChooserBlock
,而是编辑它以传递字符串'yourapp.CallToActionSnippet'
。