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):override していらっしゃる。
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
ので、真似っこしたら上手くいきました。
あぁ、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 件のコメント:
コメントを投稿