前提・実現したいこと
画像のサイズで、バリデーションを行っています。
編集の場合
・画像を選択すると、バリデーションは正常に働きます。
・画像を選択していない場合は、バリデーションがうまく働きません。
新規作成の場合
・正常に働きます。
情報不足でしたら、コメントお願いします。
どうかご教授お願い致します。
発生している問題・エラーメッセージ
'ImageFieldFile' object has no attribute 'image'
該当のソースコード
forms.py
1class ProfileEditForm(forms.ModelForm): 2 class Meta: 3 model = CustomUser 4 fields = ('username', 'email', 'avatar') 5 6 def clean_avatar(self): 7 avatar = self.cleaned_data['avatar'] 8 9 IMG_WIDTH = 200 10 IMG_HEIGHT = 200 11 IMG_SIZE = 2*1000*1000 12 13 14 if not avatar: 15 raise forms.ValidationError( 16 'プロフィール画像を選択してください。' 17 ) 18 19 if avatar.image.width < IMG_WIDTH: 20 raise forms.ValidationError( 21 'この画像の横幅は、%spxです。%spx以上の横幅の画像の登録をお願いします。' 22 % (avatar.image.width, IMG_WIDTH) 23 ) 24 25 if avatar.image.height < IMG_HEIGHT: 26 raise forms.ValidationError( 27 'この画像の高さは、%spxです。%spx以上の高さの画像の登録をお願いします。' 28 % (avatar.image.height, IMG_HEIGHT) 29 ) 30 31 if avatar.size > IMG_SIZE: 32 raise forms.ValidationError( 33 '画像サイズが大きすぎます。%sMBより小さいサイズの画像をお願いします。' 34 % (IMG_SIZE//1000//1000) 35 ) 36 37 return avatar
試したこと
forms.py
1class ProfileEditForm(forms.ModelForm): 2 class Meta: 3 model = CustomUser 4 fields = ('username', 'email', 'avatar') 5 6 def clean_avatar(self): 7 avatar = self.cleaned_data['avatar'] 8 9 IMG_WIDTH = 200 10 IMG_HEIGHT = 200 11 IMG_SIZE = 2*1000*1000 12 13 14 if not avatar: 15 raise forms.ValidationError( 16 'プロフィール画像を選択してください。' 17 ) 18 else: 19 if avatar.image.width < IMG_WIDTH: 20 raise forms.ValidationError( 21 'この画像の横幅は、%spxです。%spx以上の横幅の画像の登録をお願いします。' 22 % (avatar.image.width, IMG_WIDTH) 23 ) 24 25 if avatar.image.height < IMG_HEIGHT: 26 raise forms.ValidationError( 27 'この画像の高さは、%spxです。%spx以上の高さの画像の登録をお願いします。' 28 % (avatar.image.height, IMG_HEIGHT) 29 ) 30 31 if avatar.size > IMG_SIZE: 32 raise forms.ValidationError( 33 '画像サイズが大きすぎます。%sMBより小さいサイズの画像をお願いします。' 34 % (IMG_SIZE//1000//1000) 35 ) 36 37 return avatar 38 39
同じエラーが発生します。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。