Djangoのモデルからフォームを作りました。
forms.pyのほうでこんな感じで required=Trueにしました。
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field in self.fields.values():
field.widget.attrs['class'] = 'form-control'
field.widget.attrs['required'] = True
このrequiredをテンプレートで判定するため以下のように
{% for field in form %}
{% if field.required %}必須{% endif %}
{% endfor %}
とすればOKかと思ったら、field.required がどうしてもTrueになりません。
以下を参照すると {% if field.field.required %} にしろと書いてある。
Tell if a Django Field is required from template
それでも field.field.required はFalseのままでだめでした。
さらに以下を参照すると
Django: Make certain fields in a ModelForm required=False
you ought to add blank=True
to the corresponding model
If the model field has blank=True, then required is set to False on the form field. Otherwise, required=True.
とありました。モデルのフィールドを blank=False にしないとテンプレートでは required=True 判定しないようです。
結論としては以下となります。
- 必須にしたいモデルのフィールドを blank=False にする
- テンプレートでは
{% for field in form %}
{% if field.field.required %}必須{% endif %}
{% endfor %}
のようにする。