生じた問題
views.pyの中でCreateViewのform_validをオーバーライドしたものの,実行されなかった.
views.py
class CreateReviewView(CreateView):
# 他の動作は省略
def form_valid(self, form):
form.instance.user = self.request.user
return super().form_valid(form)
解決策
from_invalidでform.errorsを出力する.
views.py
class CreateReviewView(CreateView):
# 他の動作は省略
def form_valid(self, form):
form.instance.user = self.request.user
return super().form_valid(form)
# 以下のコードを追加
def form_invalid(self, form):
print(form.errors)
form.instance.user = self.request.user
return super().form_invalid(form)
サーバーを立て直し,上手く行かなかった動作をもう一度行います.
当然今回も上手く行きませんが,エラーの内容を確認することができます.
私の場合は以下のような出力が返ってきました.
<ul class="errorlist"><li>text<ul class="errorlist"><li>This field is required.</li></ul></li></ul>
つまりtextというフィールドが存在していないとのこと.htmlファイルを確認したところ,inputタグ内のnameが,本来はname=textとなっている必要があったところがname=testとなっており,誤字によって実行されていなかったことが分かりました.
まとめ
- form_validが実行されないときはform_invalidが実行されていることがある.
- form.errorsを出力することで,エラーの内容を確認できる.
こういう誤字ってVSCodeのError Lensとかですぐ確認できそうだけど,私のWSL環境ではError Lensが上手く働いてくれませんでした.残念!