WEBスキル

Django CreateViewのdef form_validでユーザ情報取得してデータベース登録法

CreateViewで自身のログインアカウントで新規データを登録する際にどのようにすればよいかを紹介します。

def form_validを用いる

def form_validは、そのクラス(CreateViewなど)が呼び出されたときに、def form_validの中に書かれていることを初期設定として実行します。

全体のイメージとしては

➀postdataにformで登録したいデータ一式を渡す。

➁その渡したデータに自身のアカウントを追記する。

③postdataをsave()で再登録する。

def form_valid(self,form) postdata = form.save(commit=False)・・・➀ postdata.user = self.request.user・・・➁ postdata.save()・・・③ return super().form_valid(form)

save(commit=False)の意味

ModelForm を使ってフォームを生成するときに fields や exclude を指定すると、save() ではフォームに含まれていないフィールドのデータは設定されません。そのため、Djnagoは、フォームに含まれていないフィールドに対応するモデルフィールドが、空の値を許さないように定義されていて、save() はエラーを起こします。対策として、フォームの インスタンスを生成するときに、不足しているフィールドでかつ必須のフィールドに対する初期値を指定してやるか、 save(commit=False) を使うとよいでしょう。

ABOUT ME
den
完全独学でWEBデザインを無謀にも挑戦している中年男。 工場勤務の会社員で3児の父。 チャレンジを忘れず、妻に怒られても心はおれず。 有益な情報を発信し、これを見ている人の為になればと思っています。
関連記事一覧