wagtailで、公式のチュートリアルを参考にお問合せフォームを実装しようとしていたが
公式にコード通りに書く(コピーしても)とエラー出てしまいハマってしまったので解決法をメモしておおきます。
こちらが参考にした公式のサイト
https://docs.wagtail.org/en/latest/tutorial/create_contact_page.html
エラー症状
チュートリアル通りに進めると、管理画面のページ追加するメニューに"Form Page"という項目が追加されます。
ここまでは順調ですが、この"Form Page"をクリックすると画面のようなエラーになります。
エラーで"ValueError at /admin/pages/add/base/formpage/3/"や
"Model instances passed to related filters must be saved."などが表示されていますが
ググっても合致する情報が見当たらずなんのエラーかは不明でした。
しかし、エラーを解消する方法は見つけました。
結論:解決方法
公式のコードのmodels.pyの"FormSubmissionsPanel()"の部分を消すと直ります。
正直なぜこれで直るかは分かりません。
ただ公式のコードを見ていても"FormSubmissionsPanel()"がインポートされていないことに気付きました。
ひょっとしたら、インポートされてないものを使おうとしてエラーになったのかもしれません。
from django.db import models
# import parentalKey:
from modelcluster.fields import ParentalKey
# import FieldRowPanel and InlinePanel:
from wagtail.admin.panels import (
FieldPanel,
FieldRowPanel,
InlinePanel,
MultiFieldPanel,
PublishingPanel,
)
from wagtail.fields import RichTextField
from wagtail.models import (
DraftStateMixin,
PreviewableMixin,
RevisionMixin,
TranslatableMixin,
)
# import AbstractEmailForm and AbstractFormField:
from wagtail.contrib.forms.models import AbstractEmailForm, AbstractFormField
# import FormSubmissionsPanel:
from wagtail.contrib.forms.panels import FormSubmissionsPanel
from wagtail.contrib.settings.models import (
BaseGenericSetting,
register_setting,
)
from wagtail.snippets.models import register_snippet
#・・・・・・・以下省略
ともかく、"FormSubmissionsPanel()"を消すと今度は"Form Page"をクリックするとフォーム編集の画面が表示されます。
ついでに、公式のチュートリアルは管理画面のスクショや操作方法について全く記載がなかったのでここで紹介します。
画像のような画面で、フォームの内容(例えば名前、メールアドレス、問い合わせ内容など)を自分で好きに追加できます。
inout,textarea,selectなど入力形式も設定できるようです。
最後にpublishして画面を表示するとこのようになります。
試しに何か入力して送信してみましょう。
ここで送信した内容が、管理画面のサイドバーのFormsを押すと、作成したフォームが表示されるので
それを選択すると送信内容が表示されます。
以上で、エラー解決して動作確認まで出来ました。
備考
ちなみに、公式のドキュメントで"FormSubmissionsPanel()"を探してみると
英語ですがおおよそ編集インターフェースに読み取り専用の制限をかける旨が記載してありました。
https://docs.wagtail.org/en/stable/reference/pages/panels.html