画像のアップロードフィールドがあるDjangoモデルがあり、保存する前に画像フィールドを検証して画像サイズを確認し、ユーザーが修正するためのエレガントなエラーメッセージを返します。
次のコードを使用しようとしましたが、機能しませんでした
admin.py
class BonanzaAdmin(TranslatableAdmin):
list_display = ['get_bonanza_name', 'user_profile', 'publish_date', 'created_by', 'created_at', 'all_translations']
def clean_image(self):
image = self.cleaned_data.get('image')
if not image:
raise forms.ValidationError("No image!")
else:
w, h = get_image_dimensions(image)
if w != 1170:
raise forms.ValidationError("The image is %i pixel wide. It's supposed to be 1170px" % w)
if h != 500:
raise forms.ValidationError("The image is %i pixel high. It's supposed to be 500px" % h)
return image
def save_model(self, request, obj, form, change):
if not change:
obj.created_by = request.user
obj.save()
clean_image()全体が呼び出されていません。また、名前をimage_clean()に逆にしようとしましたが、機能しませんでした。とにかく、検証をsave_modelに移動しようとしました
class BonanzaAdmin(TranslatableAdmin):
list_display = ['get_bonanza_name', 'user_profile', 'publish_date', 'created_by', 'created_at', 'all_translations']
def save_model(self, request, obj, form, change):
image = obj.image
if not image:
raise forms.ValidationError("No image!")
else:
w, h = get_image_dimensions(image)
if w != 1170:
raise forms.ValidationError("The image is %i pixel wide. It's supposed to be 1170px" % w)
if h != 500:
raise forms.ValidationError("The image is %i pixel high. It's supposed to be 500px" % h)
if not change:
obj.created_by = request.user
obj.save()
これで、2番目のコードは正常に機能し、検証プロセスが実行されますが、単純なエラーメッセージは表示されません。代わりに、例外をスローします!ユーザーが修正して再試行できるように、エラーを表示させるにはどうすればよいですか?
PSは翻訳にdjango1.4とdjango-hvadを使用しているため、TranslatableAdminから継承しています
よろしく