Django的admin友好型raise

Django的admin后台真的是太好用了,用来写管理后台简直是爽歪歪的,但是笔者最近遇到一个问题,在model定义好以后,想在保存时做一些validate,比如下面这部分

class MyDemo(models.Model):
    file = models.FileField()

这里想限制文件后缀只能是apk格式的,刚开始我可能会这么写

class MyDemo(models.Model):
    file = models.FileField()

    def save(self, *args, **kwargs):
        if not self.file.url.endswith('.apk'):
            raise ValidationError("文件格式必须为apk")
        super().save(*args, **kwargs)

覆盖save方法,于是在保存非apk格式的文件时,就会抛错

image.png

直接进到了一个抛错页面,这显然不是我想要的,非常的不友好,这时候可以考虑使用Django的自带的模型验证功能

from django.core.exceptions import ValidationError

# Create your models here.


class MyDemo(models.Model):
    file = models.FileField()

    def clean(self):
        if not self.file.name.endswith('.apk'):
            raise ValidationError("文件格式必须为apk")

保存一个非apk格式的文件

image.png

报错为红色部分,这种形式比直接跳报错页面可友好多了
image.png

其中clean:提供自定义模型验证, 就比如我的需求,模型字段验证,并友好抛错
能实现同样功能的有clean_fields:

    def clean_fields(self, exclude=None):
        if not self.file.name.endswith('.apk'):
            raise ValidationError("文件格式必须为apk")

clean功能相似,多了一个exclude可选列表,可以传入那些不用去验证的字段。
不得不说,Django的功能真的很全,又增加一技。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 点我查看本文集的说明及目录。 本项目相关内容包括: 实现过程: CH7 创建在线商店 CH8 管理支付和订单 CH...
    学以致用123阅读 3,932评论 0 6
  • Django 准备 “虚拟环境为什么需要虚拟环境:到目前位置,我们所有的第三方包安装都是直接通过 pip inst...
    33jubi阅读 1,410评论 0 5
  • 模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。软件设计中通常用耦合度和内聚...
    riverstation阅读 2,291评论 0 8
  • 已经同步到gitbook,想阅读的请转到gitbook: Django 1.10 中文文档 This tutori...
    leyu阅读 2,956评论 3 13
  • 前端相关 展示内容:浏览器接收后端返回的html文本(经过模板渲染)内容并在页面展示.与用户交互信息:js将用户产...
    Knight方阅读 2,953评论 0 1

友情链接更多精彩内容