Djangoのフォームでrequired=Trueなフィールドに必須マークをつける

Formの表示をするときに、入力が必須な項目に、「*」をつけたり「必須」って表示したりすることはよくあります。

djangoの場合、必須かどうかの定義はformクラス(ModelFormの場合はmodelクラスの場合も)に記述してあるので、テンプレート側で「この項目は必須だから必須って書いておこう」なんてことをやると、Form側の修正をした場合は、テンプレートの修正も必要になってしまいます。

<table>
    <tr>
        <th>{{ form.name.label }} </th>
        <td>{{ form.name }} </td>
        <td>必須</td>
    </tr>
    <tr>
        <th>{{ form.prefecture.label }} </th>
        <td>{{ form.prefecture }} </td>
        <td>必須</td>
    </tr>
    <tr>
        <th>{{ form.address.label }} </th>
        <td>{{ form.address }} </td>
        <td></td>
    </tr>
</table>


解決策の一つとして、fieldのrequired属性を、テンプレートから参照するという手があります

その場合、上記のコードはこう書けます。

<table>
            {% for field in form %}
                <tr>
                    <th>{{ field.label }}:</th>
                    <td>{{ field }}</td>
                    <td>{% if field.field.required %}必須{% endif %}</td>
                </tr>
            {% endfor %}
</table>


参考 : Tell if a Django Field is required from template - Stack Overflow