clean_fieldメソッド

clean_fieldメソッド

clean_fieldメソッドを使うことでバリデーションを定義出来ます。
バリデーションとはformの値を適切かどうかを検証するものです。

このようなformがあるとします。

forms.py

from django import forms


class TodoForm(forms.Form):

    title = forms.CharField(label="タイトル")
    detail = forms.CharField(label="詳細", widget=forms.Textarea)

例えばこのtitleの文字数を最低2文字以上にしたいとしましょう。
その場合は下のように書きます。

from django import forms
from django.core.exceptions import ValidationError


class TodoForm(forms.Form):

    title = forms.CharField(label="タイトル")
    detail = forms.CharField(label="詳細", widget=forms.Textarea)

    def clean_title(self):
        title = self.cleaned_data.get('title')
        if len(title) < 2:
            raise ValidationError("短すぎです。2文字以上にしてください。")
        return title

clean_titleという関数がありますね。
DjangoのFormでは

clean_fieldを使ってバリデーションを自分で定義することが出来ます。

上の例で言うとdetailというフィールドにバリデーションをかけるなら

def clean_detail(self)のように使います。

title = self.cleaned_data.get('title')

self.cleaned_data.get('フィールド名')でそのフィールドに入力された値を取得出来ます。

if len(title) < 2:
    raise ValidationError("短すぎです。2文字以上にしてください。")

タイトルが2文字未満なら

短すぎです。2文字以上にしてください。

これがerror_massagesに入ります。

例えば

<div class="row">
  <div class="col-sm-7 col-md-6 mx-auto">
    <label for="{{ form.title.id_for_label }}">{{ form.title.label }}</label>
    {{ form.title }}
    {% for error in form.title.errors %}
    <p class="">{{ error }}</p>
    {% endfor %}
  </div>
</div>

Templateがこのような場合だと

<p class="">{{ error }}</p>

ここに

短すぎです。2文字以上にしてください。

と表示されます。

Just Python フリープラン

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