首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django管理字段验证以返回错误,在应用程序中不引发异常

Django管理字段验证以返回错误,在应用程序中不引发异常
EN

Stack Overflow用户
提问于 2012-09-23 08:59:40
回答 2查看 8.8K关注 0票数 5

我有一个Django模型,其中有一个图像上传字段,它试图验证图像字段以在存储之前检查图像大小,并返回优雅的错误消息供用户更正。

我试图使用下面的代码,但它没有工作

admin.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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继承

问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-23 12:14:27

正如demalexx所说,您应该使用其他形式来验证您的模型。

代码语言:javascript
复制
class Bonanza(models.Model):
    user_profile = models.CharField(max_length = 128)
    publish_date = models.DateField()

在您的管理表单中使用任何验证:

代码语言:javascript
复制
class BonanzaAdminForm(forms.ModelForm):
    class Meta:
        model = Bonanza
    def clean(self):
        # Validation goes here :)
        raise forms.ValidationError("TEST EXCEPTION!")

和简单的自动生成的管理:

代码语言:javascript
复制
class BonanzaAdmin(admin.ModelAdmin):
    form = BonanzaAdminForm

admin.site.register(Bonanza, BonanzaAdmin)
票数 11
EN

Stack Overflow用户

发布于 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中有关于自定义验证的文档

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12550999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档