【Python Django】クラスベースビューからフォームクラスへ値を渡す – get_form_kwargs

DjangoDjango

(最終更新月:2021年12月)

「viewクラスからFormクラスへ値を渡したい!」

「Formクラスで任意のオブジェクトを取得、使用したい!」

というDjangoフレームワークでお困りの方へ向けた記事となります

当記事を通じて、

  • views.py ビュークラス から forms.py フォームクラスへ値を渡す方法

を解説します

特に、inputフォームなどに動的な初期値を設定したい場合やログインユーザーを自動保存としたい場合などには重宝することと思います

  • ビュークラスでは「get_form_kwargs」関数
  • フォームクラスでは「__init__」関数

へ記述をすることで値を渡すことができますので、「request.user」情報をフォームクラスで受け取ってみましょう!

初期費用ゼロ/月9,800円でWebデザインが学べる

デザインを習得するためには、客観的なフィードバックと改善が不可欠です。

以下の記事ではこんなWebデザインスクールをご紹介しています。

  • 初期費用ゼロで、月々9,800円のみ
  • オンラインで、教材が使い放題
  • コンテストや実務案件にチャレンジして報酬もGETできる

デザナルはトップデザイナーからレビューがもらえる、格安のWebデザインスクールです。

>>デザナルに興味がある方はこちらからどうぞ<<

詳細をまとめた記事もございますので、ぜひご覧ください。

おススメ記事!興味ある方はこちらもどうぞ!

【超簡単】RaspberryPIでUbuntu搭載のPCを作る
【DigitalOcean】Dropletsを作成する5ステップ

get_form_kwargs関数

ビュークラスの「get_form_kwargs関数」は、FormViewCreateViewUpdateViewに用意されているメソッドです

返された辞書型の値がフォームクラスへ渡されます

ユーザー情報をフォームクラスへ渡すまでは下記のとおりです

def get_form_kwargs(self, *args, **kwargs):
    kwgs = super().get_form_kwargs(*args, **kwargs)
    kwgs["user"] = self.requst.user
    return kwgs

【解説】

kwgs = super().get_form_kwargs(*args, **kwargs)

スーパークラスからget_form_kwargsを受け取り「kwgs」変数へ格納します

kwgsは辞書型のオブジェクトになります

kwgs["user"] = self.requst.user

「kwgs」変数に{ “user”: self.request.user }を格納します

    return kwgs

辞書型変数「kwgs」を返します

返された「kwgs」をフォームクラスで受け取りましょう

__init__関数

フォームクラス「__init__関数」では、ビュークラスで設定した辞書型のキーを引数として受け取る必要があります

def __init__(self, user=None, *args, **kwargs):
    #必要な処理を行いましょう        
    super().__init__(*args, **kwargs)

まとめ

ビュークラスからフォームクラスへ値を渡す方法は下記のとおりです

【①ビュークラス:get_form_kwargs関数】

  • スーパークラスからの結果を受け取る
  • スーパークラスから受け取った結果に任意の値を追記する

【②フォームクラス:__init__関数】

  1. ビュークラスで追加した値のキーを引数へ設定
  2. 受け取った値で必要な処理を行う

いかがでしょうか?

皆さんの「困った!」が解決できれば幸いです

当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています

「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」

という方は必見です!

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!
タイトルとURLをコピーしました