(最終更新月:2021年12月)
「viewクラスからFormクラスへ値を渡したい!」
「Formクラスで任意のオブジェクトを取得、使用したい!」
というDjangoフレームワークでお困りの方へ向けた記事となります
当記事を通じて、
- views.py ビュークラス から forms.py フォームクラスへ値を渡す方法
を解説します
特に、inputフォームなどに動的な初期値を設定したい場合やログインユーザーを自動保存としたい場合などには重宝することと思います
- ビュークラスでは「get_form_kwargs」関数
- フォームクラスでは「__init__」関数
へ記述をすることで値を渡すことができますので、「request.user」情報をフォームクラスで受け取ってみましょう!
get_form_kwargs関数
ビュークラスの「get_form_kwargs関数」は、FormView、CreateView、UpdateViewに用意されているメソッドです
返された辞書型の値がフォームクラスへ渡されます
ユーザー情報をフォームクラスへ渡すまでは下記のとおりです
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__関数】
- ビュークラスで追加した値のキーを引数へ設定
- 受け取った値で必要な処理を行う
いかがでしょうか?
皆さんの「困った!」が解決できれば幸いです