DjangoのModelFormのフィールドをhidden属性にする方法
- 公開日:2019/01/23
- 更新日:2019/01/23
- 投稿者:n bit
Djangoでユーザの手間を減らすため直接フィールドへの入力をさせない場合や、隠しinput属性でデータを受け渡したい場合などにModelFormのフィールドをhidden属性にする方法を一括と個別の2種類解説します。
この記事は約 分で読めます。(文字)
ModelFormのフィールドをhidden属性にするケース
事前に定型で決まっているような入力内容や、運営側から発行する仮パスワードの様に直接ユーザサイドで入力してもらう必要がないフィールドに関しては非表示にしておくことでユーザの入力の手間を減らすことができます。
UXの改善にもつながりますのでこのようなケースに関しては積極的に対応していくべきですね。
これらの場合ModelFormで生成されるフィールドにhidden属性をつける必要があります。
ModelFormのフィールドをhidden属性にする方法
DjangoのModelFormで生成されるフィールドにhidden属性をつける方法は大きく分けて2種類あります。
すべてのテンプレートにおいて一括でhidden属性をつけてしまう方法と、各テンプレートごとに個別でhidden属性をつける方法です。
それぞれ順番に説明していきます。
fields[‘name’].widget で特定フィールドをhidden属性にする
ModelFormのdef __init__内でウィジェットを使って直接フィールドをhidden属性にする方法があります。こちらの方法はModelFormで直接hidden属性にするため、どのテンプレートで表示させても全てhidden属性のフィールドとして生成されます。
常にhidden属性では使いたいフィールドの場合はこちらの方法で対応するのが一括で行え1番手間がかかりません。
使い方は特定のフィールドに対して以下のように指定します。
- self.fields[‘フィールド名’].widget = forms.HiddenInput()
class HogeForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['name'].widget = forms.HiddenInput()
as_hidden で特定フィールドをhidden属性にする
もう一つは『as_hidden』を使う方法です。こちらはテンプレート内で特定フィールドに対して個別に指定します。
テンプレート内で指定するためテンプレート内での条件分岐等と合わせた利用も可能で柔軟に対応することができます。
使い方はテンプレート内で特定のフィールドに対して以下のように指定してください。
- {{ form.フィールド名.as_hidden }}
{{ form.name.as_hidden }}
例えば以下のようにテンプレート内でログインユーザと未ログインユーザでフィールドの表示を変更したりできます。
{% if user.is_authenticated %}
{{ form.name }}
{{ form.name.errors }}
{% else %}
{{ form.name.as_hidden }}
{% endif %}
今日のdot
DjangoでModelFormの特定フィールドをhidden属性にする方法を2種類紹介しました。
fields['name'].widget で特定フィールドをhidden属性にする
self.fields['name'].widget = forms.HiddenInput()
as_hidden で特定フィールドをhidden属性にする
{{ form.name.as_hidden }}
個別にコントロールする必要がなく一括でhidden属性を適用できる、テンプレート内での条件分岐等が必要で個別に対応する必要がある等、状況に応じて使い分けてください。