Fieldの基本
Field
ここではFieldの基本的な使いかたを学習します。
Fieldに渡せる引数
Fieldに引数を渡すことで色々な設定が出来ます。
ここでは一部を扱っていきます。
require
下記のように引数にrequired渡すことで
例えば入力を必須にするかどうかを設定することが出来ます。
title = forms.CharField(required=False)
特に指定しなければ基本的に入力必須になります。
label
labelはFieldがformで表示されるときに使用されます。
title = forms.CharField(label="タイトル")
テンプレート側で下記のように使うことが出来ます。
<label for="{{ form.detail.id_for_label }}">{{ form.detail.label }}</label>
{{ form.detail }}
initial
initialで初期値を指定出来ます。
title = forms.CharField(initial="タイトル")
下記のようにvalue="タイトル"
になります。
<input type="text" name="title" value="タイトル" required="" id="id_title">
widget
widgetを指定することで例えばinputタグではなくTextareaを使うといったことが出来ます。
Widgetについてはまた別のページで扱います。
detail = forms.CharField(widget=forms.Textarea)
help_text
help_textでFieldのヘルプテキストを指定します
テンプレート側で下記のように使うことが出来ます。
{{ form.title }}
<p>{{ form.title.help_text }}</p>
error_massages
エラーメッセージを指定出来ます。
テンプレート側で下記のように使うことが出来ます。
{{ form.title }}
{% for error in form.title.errors %}
<p class="">{{ error }}</p>
{% endfor %}
validators
バリデーション関数をリストで渡します。
下の例ではMaxLengthValidator
を使い
5文字以下の場合に 5文字以下にしてください
とエラーメッセージが出すことが出来ます
title = forms.CharField(
label="タイトル",
validators=[validators.MaxLengthValidator(4, message="5文字以下にしてください")]
)
例えばこのようにエラーメッセージを取り出すことが出来ます
{{ form.title }}
{% for error in form.title.errors %}
<p class="">{{ error }}</p>
{% endfor %}
disabled
例えば下記のように
title = forms.CharField(label="タイトル", initial="タイトル", disabled=True)
disabled=True
このようにすることで入力出来ないようにすることが出来ます。
フォームの内容をこちらで指定して、ユーザーに変更させず
その値を使いたいといった時に使うと良いでしょう。
この例ではinitial="タイトル"
で初期値を設定しています。
Fieldクラス
ここではFieldクラスを扱います。
例えばTrue Falseを扱うBooleanField
や文字列を扱うCharField
があります。
ここでは一部を取り上げます。
BooleanField
BooleanField
はTrue Falseを扱います。
デフォルトではチェックボックスが使われます。
CharField
CharField
は文字列を扱います。
デフォルトではinputタグのtype="text"が使われます。
max_length min_lengthを渡すことで
最大の何文字まで、もしくは最低何文字以上といったことを指定出来ます。
ChoiceField
ChoiceField
で複数の選択肢用意し、入力された値が選択肢になければエラーになります。
デフォルトでセレクトタグが使われます
class LangForm(forms.Form):
choices = (
('ja', '日本語'),
('en', '英語'),
('zh', '中国語'),
)
language = forms.fields.ChoiceField(
choices = choices,
label="言語",
)
例えば日本語が選択されpostされると他のフィールドのように
language = form.cleaned_data['language']
このように受け取りlanguage
の中身はja
になります。
テンプレート側の使い方も他のフィールド同様
<label for="{{ form.language.id_for_label }}">{{ form.language.label }}</label>
{{ form.language }}
{% for error in form.language.errors %}
<p class="">{{ error }}</p>
{% endfor %}
form.language
、form.フィールド名
で表示出来ます
DateField
DateField
は日にちを扱います。
デフォルトでは2022-8-20
のように
年-月-日
と入力します。
datetime.date、datetime.datetime、特定の日付の表示形式に該当するかバリデートします
DateTimeField
日にちと時間を扱います
デフォルトでは
2026-10-25 18:20:25
2026-10-25 18:20
2026-10-25
のように入力します
EmailField
メールアドレスかどうかをバリデートします
inputタグのtype="email"が使われます
IntegerField
数字を扱います
min_value、 max_valueを渡すことで最小値や最大値を指定出来ます
SlugField
slugかどうかをバリデートします
modelのSlugFieldをフォームで表示するのに使います
slug = forms.SlugField(
label="Slug",
)
URLField
URLかどうかをバリデートします
max_length, min_lengthを使えます。
SplitDateTimeField
デフォルトではinputタグが2つ表示され
それぞれに日にちと時間を入力します
ModelChoiceField
querysetを指定してそれがセレクトタグで表示されます。
category = forms.ModelChoiceField(
label="カテゴリー",
queryset=Category.objects.all()
)
empty_labelに未選択時の表示させる文字列を指定出来ます
デフォルトでは "---------" が使われます
to_field_nameを渡すことでフィールドを指定出来ます
Just Python フリープラン
ジャスパイなら教材は全て無料!