models.Fieldの設定がなくModelに格納できないようなforms.Fieldもひとまとめにバリデートする。
models.Modelに列挙されていないFieldが含まれているとsaveできない。 Form.clean_<field>の返り値は再び代入されてNoneが入るので、このメソッドでは削除できない。 Form.cleanでpopする。
(Django 0.96)
# -*- coding: utf-8 -*-
from django import newforms as forms
from django.newforms.util import ValidationError
from django.utils.translation import gettext
from models import Tag
class BaconForm(forms.Form):
content = forms.CharField(
widget = forms.Textarea,
max_length = 1000,
)
tags = forms.ModelMultipleChoiceField(
queryset = Tag.objects.all(),
)
check = forms.BooleanField(
required = False,
)
def clean_check(self):
if self.clean_data["check"] is not True:
raise ValidationError(gettext(u"チェックしてね。はぁと"))
def clean(self):
self.clean_data.pop("check")
return super(BaconForm, self).clean()
