DjangoのFormで初期値(画面表示時に初めから設定されている値)を設定する方法については様々な方法があるが、以下にそれぞれ記載する。
Formに初期値を設定する方法
views.pyで設定する方法
views.pyで設定するのは、画面で表示するformインスタンス初期化時に設定する方法である。
まず、forms.pyは以下のように設定する。
- forms.py(フォーム)の設定
year = forms.DateField()
some_text = forms.CharField(label='Text')
choices = forms.CharField(label='Text')
boolean = forms.BooleanField()
integer = forms.IntegerField()
email = forms.EmailField(min_length=10)
そして、views.pyには以下のように設定して初期化する
- views.py(ビュー)で初期化する
def home(request):
initial_dict = {
'some_text': 'Text',
'boolean': True,
}
form = TestForm(request.POST or None, initial=initial_dict)
# 初期化時に第2引数に初期値を設定する。some_text=Text, boolean=Trueが初期値で設定される
return render(request, 'form.html', {'form': form})
フォームを画面に表示する(form.as_p)と、以下のように表示される
フォームクラスのフィールド上で設定する方法
フォームクラスの各フィールドにinitial=''として、値を設定する方法である。
- forms.py(フォーム)の設定
year = forms.DateField()
some_text = forms.CharField(initial='Text', label='Text')
choices = forms.CharField(label='Text')
boolean = forms.BooleanField(initial=True)
integer = forms.IntegerField()
email = forms.EmailField(min_length=10)
すると画面上には以下のように表示される
フォームクラスのコンストラクタで設定する方法
これは、フォームクラスの__init__上に設定する方法で、以下のように記載する
- forms.py(フォーム)の設定
year = forms.DateField()
some_text = forms.CharField(label='Text')
choices = forms.CharField(label='Text')
boolean = forms.BooleanField()
integer = forms.IntegerField()
email = forms.EmailField(min_length=10)
# __init__上でフィールドを初期化
def __init__(self, *args, **kwargs):
super(TestForm, self).__init__(*args, **kwargs)
self.fields['some_text'].initial = 'Text'
self.fields['boolean'].initial = True
画面上には以下のように表示される