ここでは,より確認しやすいように,title の文字数上限を10文字,body の文字数上限を 15 文字として,データベースに登録する前にその内容を検証する.入力内容の検証をするためには,comments/form.py に僅かなコードを追加するだけで良い.
comments/form.py
from django import forms
from .models import Comment
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ('title', 'body')
widgets = {
'title': forms.TextInput(attrs={
'class': 'form-control'
}),
'body': forms.TextInput(attrs={
'class': 'form-control'
}),
}
labels = {
'title': 'タイトル',
'body': '本文',
}
def clean(self):
data = super().clean()
title = data.get('title')
body = data.get('body')
if len(title) > 10:
msg = "タイトルの最大文字数は10文字です"
self.add_error('title', msg)
if len(body) > 15:
msg = "本文の最大文字数は15文字です"
self.add_error('body', msg)
title に 11 文字,body に 16 文字を設定して投稿しようとすると,期待通りエラーが表示された.
title に 10 文字,body に 15 文字を設定して投稿しようとすると,投稿が完了した.
なお,CreateView などではフォームから受け取ったデータからホワイトスペース自動的に削除するような機能が備わっている.よって,先頭と最後に(半角や全角)スペースを入力して更新しても,スペースが削除されていることを確認すると良い.ただし,スペースだけを入力した場合はエラーになってしまう.このあたりのバグは後ほど修正しよう.