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
格式的文件时,就会抛错
直接进到了一个抛错页面,这显然不是我想要的,非常的不友好,这时候可以考虑使用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
其中clean
:提供自定义模型验证, 就比如我的需求,模型字段验证,并友好抛错
能实现同样功能的有clean_fields
:
def clean_fields(self, exclude=None):
if not self.file.name.endswith('.apk'):
raise ValidationError("文件格式必须为apk")
与clean
功能相似,多了一个exclude
可选列表,可以传入那些不用去验证的字段。
不得不说,Django的功能真的很全,又增加一技。
网友评论