Closed3
form_validをオーバーライドした時、その中で値を追加しても良いのか?
フォームを使ってデータを保存する時、ユーザーに選択させたくない情報を追加したいってなった時、良く出てくるのが「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()を呼ぶべきなのだろうか?
フォームに入力欄が無いので、form.is_valid()
を呼んでも効果が無い。やはりこの方法しかないのかな・・・
form.is_valid()
は「フォームに入力された情報がモデルのバリデーションを通過しているか」を確かめるだけなので、フォームにないデータはその責務ではないという考えなんだろうな。
「フォームに対してはバリデーションの責務を持つけど、フォームとして入力されていないデータが正しいかはフォームの責務ではない」という事だと思うので、今回はこの実装のままやろう。
このスクラップは2023/08/21にクローズされました