2009/06/15

modelform "def clean"

Django で日付の前後関係で validation したいなと思いました。
validation がどこで行われてるのかすら頭になかったんですが
適当に検索すると clean_???? (???? は form field の名前ね) とか clean とかで
色々されてることが分かりました。
で、複数の field を跨ぐ validation は clean を override するらしい。

サンプルがどっかにあるに違いないと思い
modelform を使ってるところで clean を override してるページを検索すると
[django-ja:662] ModelFormにおけるユニークフィールドのバリデーション
http://groups.google.com/group/django-ja/browse_thread/thread/74fcda259ded1cd0 の方が最初に hit
おぉ、真に
    def clean(self):
cleaned = super(CompanyForm, self).clean()
date_from = cleaned.get('valid_from')
date_to = cleaned.get('valid_to')
if date_from is not None and date_to is not None:
if date_to < date_from:
raise forms.ValidationError(u'有効期間の終了日が開始日よりも前の日付です。')
return cleaned
override していらっしゃる。
ので、真似っこしたら上手くいきました。

あぁ、Creating forms from models を見るとちゃんと
class MyModelFormSet(BaseModelFormSet):
def clean(self):
super(MyModelFormSet, self).clean()
# example custom validation across forms in the formset:
for form in self.forms:
# your custom formset validation
書いてあるなぁ、ちょっと違うけど

0 件のコメント:

コメントを投稿