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.languageform.フィールド名で表示出来ます

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 フリープラン

ジャスパイなら教材は全て無料!