2017-11-23 15 views
0

削除したSnippetChooserBlockに基づいてストリームフィールドブロックを作成しましたが、これは問題ありません。Streamfieldブロックを削除するときにWagtail Migrationエラーが発生しました。

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

すべてのアイデアは、私がここで間違って何をやっている:古い移行ファイルからmakemigrationsを実行しているとき、私はその後、その後、また私のモデルからCallToActionSnippetを削除しようとした

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

、私はエラーを取得します? SFカスタムブロックは特定のブロックタイプに基づいている場合は削除できませんが、SnippetChooserBlockは問題ありません。

ジョス

答えて

0

おかげで問題が直接SnippetChooserBlockと私はあなたが削除想像スニペットCallToActionSnippetではないでしょうか?

このStreamfieldが最初に作成された移行を見ると、wagtail.wagtailsnippets.blocks.SnippetChooserBlock(yourapp.snippets.CallToActionSnippet)のように表示されます。ただし、スニペットを削除したため、移行がロードしようとすると失敗します。

SnippetChooserBlockのターゲットモデルは、appname.modelnameタイプの文字列(後でlazily loaded)として渡すことができます。したがって、モデルのインスタンスをマイグレーション中にwagtail.wagtailsnippets.blocks.SnippetChooserBlockに渡す代わりに、それを編集して文字列'yourapp.CallToActionSnippet'を渡します。

+0

ありがとう、どういう意味なのか分かります。私はおそらく、現時点ではデータがないので、すべての移行を削除し、モデルから最初から開始するつもりです。私はこれを避けていたかもしれませんが、その前から、私はこの間違いをもう一度しません。モデルでスニペットを参照するときに、その時点でappname.modelname文字列を使用する必要がありますか? – joss

+0

確かに。 StreamField定義で 'SnippetChooserBlock(CallToActionSnippet)'を使うと、 'SnippetChooserBlock( 'core.CallToActionSnippet')を使って' wagtail.wagtailsnippets.blocks.SnippetChooserBlock(yourapp.snippets.CallToActionSnippet) 'が生成され、' wagtail.wagtailsnippets.blocks 'が生成されます。 SnippetChooserBlock( 'core.CallToActionSnippet') 'これはインポートエラーを引き起こさないでしょう。 –

関連する問題