首页 > 解决方案 > 如何在 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()

为什么我没有收到错误?

标签: pythonsqldjangovalidationdjango-models

解决方案


当您使用对象时,验证器不会运行.save(),这主要是出于性能原因。您可以调用.full_clean()方法 [Django-doc]来验证模型对象:

from my_app.models import Exam

exam = Exam()
exam.subject = ''
exam.full_clean()
exam.save()

AModelForm还将清理模型对象,因此如果您通过 a 创建或更新模型,验证器将运行ModelForm


推荐阅读