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) を使うとよいでしょう。