Closed3

form_validをオーバーライドした時、その中で値を追加しても良いのか?

DogFortuneDogFortune

フォームを使ってデータを保存する時、ユーザーに選択させたくない情報を追加したいってなった時、良く出てくるのが「form_validをオーバーライドする」というのがあります。

例えばフォーム保存する時に特定の外部キーが必要な場合、それを追加して保存する感じ。

    def form_valid(self, form):
        # フォームにない情報。これはユーザーに操作させたくないので自動で追加させたい。
        form.instance.hogehoge_foreign_key = self.kwargs['hogehoge']
        return super().form_valid(form)

ですが、form_validは「フォームのバリデーションが通った後に呼ばれる」メソッドなので、バリデーションがOKになった後に値を追加するのはいいのだろうか?という疑問が湧いた。この実装は正しいのだろうか?
もし行うなら値を追加した後、form.is_valid()を呼ぶべきなのだろうか?

DogFortuneDogFortune

フォームに入力欄が無いので、form.is_valid() を呼んでも効果が無い。やはりこの方法しかないのかな・・・

DogFortuneDogFortune

form.is_valid()は「フォームに入力された情報がモデルのバリデーションを通過しているか」を確かめるだけなので、フォームにないデータはその責務ではないという考えなんだろうな。
「フォームに対してはバリデーションの責務を持つけど、フォームとして入力されていないデータが正しいかはフォームの責務ではない」という事だと思うので、今回はこの実装のままやろう。

このスクラップは2023/08/21にクローズされました