python - 如何在 django 中使用验证器
问题描述
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
def validate_subject(value):
if value.isalnum():
raise ValidationError(_('%(value)s is not valid. Please use alphanumneric characters as subject names'), params={'value': value},)
class Exam(models.Model): #Exam can have many questions
subject = models.TextField(primary_key=True, unique = True, validators = [validate_subject]) #make it to reject a string of length 0
def __str__(self):
return self.subject
我希望此代码在键入以下内容时引发错误
from my_app.models import Exam
exam = Exam()
exam.subject = ""
exam.save()
为什么我没有收到错误?
解决方案
当您使用对象时,验证器不会运行.save()
,这主要是出于性能原因。您可以调用.full_clean()
方法 [Django-doc]来验证模型对象:
from my_app.models import Exam
exam = Exam()
exam.subject = ''
exam.full_clean()
exam.save()
AModelForm
还将清理模型对象,因此如果您通过 a 创建或更新模型,验证器将运行ModelForm
。
推荐阅读
- java - 按 Stream API 的频率对集合进行排序
- xamarin - 下载照片未保存在本地文件夹 Xamarin Forms iOS
- laravel - Laravel-Vue:如何使用 try-catch 块来捕获验证请求中的验证异常?
- postgresql - 如何比较 pgsql 中的“从”和“到”时间字段?
- ansible - 父母和孩子的库存
- python - 如何使用python获取最终网址?
- javascript - 具有自定义开始和结束时间的自定义 youtube 播放列表
- python - 替换 BeautifulSoup 迭代器中的字符串提前退出?
- c# - 如何停止文本框验证?
- excel - vba 代码根据每个宏运行更新状态