我有一个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()现在,第二段代码运行良好,它通过验证过程,但它没有显示简单的错误消息。相反,它抛出一个异常!如何使它显示一个错误,这样用户就可以更正并再试一次?
P.S正在使用django 1.4和django-hvad进行翻译,这就是为什么要从TranslatableAdmin继承
问候
发布于 2012-09-23 12:14:27
正如demalexx所说,您应该使用其他形式来验证您的模型。
class Bonanza(models.Model):
user_profile = models.CharField(max_length = 128)
publish_date = models.DateField()在您的管理表单中使用任何验证:
class BonanzaAdminForm(forms.ModelForm):
class Meta:
model = Bonanza
def clean(self):
# Validation goes here :)
raise forms.ValidationError("TEST EXCEPTION!")和简单的自动生成的管理:
class BonanzaAdmin(admin.ModelAdmin):
form = BonanzaAdminForm
admin.site.register(Bonanza, BonanzaAdmin)发布于 2012-09-23 10:35:33
继承ModelAdmin,它没有验证方法。相反,您应该重写form属性,以提供自定义表单并向该窗体添加验证方法。在admin:https://docs.djangoproject.com/en/1.4/ref/contrib/admin/#adding-custom-validation-to-the-admin中有关于自定义验证的文档
https://stackoverflow.com/questions/12550999
复制相似问题