[Django] FileFieldのカスタムバリデーションで微ハマり
2008年12月15日
Fieldに対してカスタムバリデーションを設定する際に、
それがFileField(とそのサブクラス)である場合にやや設定方法に違いがあってハマった。
Django は 1.0.2-final です。
それがFileField(とそのサブクラス)である場合にやや設定方法に違いがあってハマった。
Django は 1.0.2-final です。
結論から申しますと、こんな風にcleanを書く必要がある。
def clean(self, value, initial): # ...エラー処理とか... return value
何が違うかというと、第3引数のinitial(変数名はなんでもいいけど)が必要だってことです。
ここで、ググっても話題に出てこないので、
本当にこれでいいのかとソース確認
何はともあれ、夢と希望と自分ほど信じられないものはない
本当にこれでいいのかとソース確認
何はともあれ、夢と希望と自分ほど信じられないものはない
…/django/forms/form.py の full_cleanメソッド内
try: if isinstance(field, FileField): initial = self.initial.get(name, field.initial) value = field.clean(value, initial) # 引数の数が else: value = field.clean(value) # 違います self.cleaned_data[name] = value
・・・うん、なんか処理分けてるね!
何で分けてるのかはわからんけど、対処は間違ってないっぽい。