0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Django】form_validが実行されないときの対処法

Last updated at Posted at 2023-02-28

生じた問題

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が上手く働いてくれませんでした.残念!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?