hikaru’s diary

Django Engineer

【Django】viewsからフォームの初期値を設定する

違うテンプレートでformを使いまわしたいけど初期値は変えたかったので色々調べました。

[Django]Formに初期値を設定する方法
https://codelab.website/django-form-initial/

class a(TemplateView):
    template_name = 'kinmu.html'

    def b(self, **kwargs):
        params = {'form': None, 'name': self.user}
        initial_dict = dict(name=params['name'])  # 追加
        if self.method == 'POST':
            form = cForm(self.POST, initial=initial_dict)  # initialを追加
            print(form)
            if 'btn1' in self.POST:
                """
                ボタン1を押したときの処理です
                """
            elif 'btn2' in self.POST:
                """
                ボタン2を押したときの処理です
                """
            params['form'] = form
        else:
            params['form'] = cForm(initial=initial_dict)

        return render(self, 'd.html', params)

cFormにself.POSTとinitialを設定します。
self.userというのはログイン情報から持ってきているのでparams['name']を適当な文字列にしてください。

どのボタンを押されたかで処理を変えているの個人的に良いと思っているんですけど、ドキュメントには見る限り記載がないのでやめたほうがいいかもしれません...