フォームにおけるカスタムバリデーションメソッドの共通化について
Djangoで複数のファイルアップロード処理を行うにあたり、カスタムバリデーションメソッドを共通化したいのですが、方法が分かりません
from django import forms
from django.contrib.staticfiles.templatetags.staticfiles import static
from django.contrib.admin import widgets
from django.core.exceptions import ValidationError
import os
class ContactForm(forms.Form):
profile_image = forms.Field(
label='プロフィール画像のアップロード',
required=False,
widget = forms.FileInput())
header_image = forms.Field(
label='ヘッダー画像のアップロード',
required=False,
widget = forms.FileInput())
def clean_profile_image(self):
profile_image = self.cleaned_data.get('profile_image', False)
if profile_image:
valid_extensions = ['.png','.jpg','.gif']
ext = os.path.splitext(profile_image.name)[1]
if profile_image._size > 2411724:
raise ValidationError("ファイルサイズが大きすぎます(最大2.3MB)")
elif not ext in valid_extensions:
raise ValidationError("許可されていないファイルタイプです")
def clean_header_image(self):
header_image = self.cleaned_data.get('header_image', False)
if header_image:
valid_extensions = ['.png','.jpg','.gif']
ext = os.path.splitext(header_image.name)[1]
if header_image._size > 2411724:
raise ValidationError("ファイルサイズが大きすぎます(最大2.3MB)")
elif not ext in valid_extensions:
raise ValidationError("許可されていないファイルタイプです")
上記の通りカスタムバリデーションであるclean_profile_imageとclean_header_imageの処理内容は同一です。こちらを一つにまとめる方法がありましたら、ご教授いただきたく...
なお、profile_image/header_imageともにrequired=Falseです