【Django】Formのバリデーション・最大文字数・エラー文の変更

シェアする

  • このエントリーをはてなブックマークに追加

Djangoのバージョンは1.11.6

以下のようなmodelとformがあるとする。
models.py

from django.db import models
from best5_user.models import CustomUser

# Create your models here.
class Theme(models.Model):
    user = models.ForeignKey(CustomUser, related_name='themes', blank=True)
    title = models.CharField(max_length=100)
    description = models.CharField(max_length=1000, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table='themes'

forms.py

from django.forms import ModelForm
from .models import Theme

class ThemeForm(ModelForm):
    class Meta:
        model = Theme
        fields = ['title', 'description']

formの送信後、views.pyでformの内容を受け取りバリデーションするが、

form = ThemeForm(request.POST)
    if form.is_valid():

modelに

title = models.CharField(max_length=100)

すると100字をこえると以下のようにエラーをブラウザに表示してくれた。
Title:
この値は 100 文字以下でなければなりません( 101 文字になっています)。

ちなみにtemplateは

{{ form.title.errors }}

form.フィールド名.errorsで出せる。
このとき出力されるHTMLは、

<ul class="errorlist">
    <li>エラーメッセージ</li>
</ul>

となる。
エラーメッセージのとこだけ抜き出したければ

{% if form.title.errors %}
    {% for error in form.title.errors %}
       {{ error|escape }}
    {% endfor %}
 {% endif %}

とすればできる。

エラーメッセージをカスタマイズ

出力されるエラーメッセージを好きなものに変えたい
models.py

title = models.CharField(max_length=100, error_messages={'key': 'message'})

モデルにerror_messages={‘key’: ‘message’}を設定するとエラーメッセージを上書きできるらしい。

オーバライドしたいメッセージに対応する文字列をキー とし、メッセージを値に持つ辞書を渡してください。

http://djangoproject.jp/doc/ja/1.0/ref/forms/fields.html
‘オーバライドしたいメッセージに対応する文字列’とはこの場合なにになるんだ。。。

試しにmax_lengthを指定してみる。

title = models.CharField(max_length=1, error_messages={'max_length': 'message'})

が、変わらず。。。

わからない。。。