Django模型中的自定义字段验证
这篇文章围绕着如何为一个特定的字段添加自定义验证。例如,通过指定特定的格式为CharField添加电子邮件的验证。如何实现自定义验证,可以有多种方法。在这篇文章中,我们将从模型本身来展示它,这样你就不需要在其他地方操作它。
当你试图创建一个模型的实例时,这些验证被运行。技术上来说,这个验证是在你运行ModelName.objects.create(data = data)之后实现的。
语法 –
field_name = models.Field(validators = [function 1, function 2])
Django自定义字段验证的解释
用一个例子来说明验证器的情况。考虑一个名为geeksforgeeks的项目,有一个名为geeks的应用程序。
在geeks应用程序的models.py文件中输入以下代码。我们将使用CharField对所有字段选项进行实验。
from django.db import models
from django.db.models import Model
# Create your models here.
class GeeksModel(Model):
geeks_mail = models.CharField(
max_length = 200,
)
现在我们将应用一个自定义验证,使上述字段只对google邮件ID进行验证。创建一个函数,接受一个名为value的参数。现在我们可以对value应用任何类型的操作。所以让我们检查我们的函数value是否包含@gmail.com,以便只对google邮件ID进行验证。
from django.db import models
# importing validationerror
from django.core.exceptions import ValidationError
# creating a validator function
def validate_geeks_mail(value):
if "@gmail.com" in value:
return value
else:
raise ValidationError("This field accepts mail id of google only")
# Create your models here.
class GeeksModel(models.Model):
geeks_mail = models.CharField(max_length = 200)
现在让我们把这个函数作为一个验证器添加到我们的字段中。注意,一个验证器函数可以同时用于多个字段。
from django.db import models
# importing validationerror
from django.core.exceptions import ValidationError
# creating a validator function
def validate_geeks_mail(value):
if "@gmail.com" in value:
return value
else:
raise ValidationError("This field accepts mail id of google only")
# Create your models here.
class GeeksModel(models.Model):
geeks_mail = models.CharField(
max_length = 200,
validators =[validate_geeks_mail]
)
让我们试着创建一个没有gmail.com的实例,检查我们的验证是否有效。请注意,在models.py的每一次修改之后,都需要运行makemigrations和migrate命令。
在你的浏览器中,进入http://localhost:8000/admin/geeks/geeksmodel/add/,并输入 “abc@geeksforgeeks.org”。
让我们看看它是否被保存在数据库中。
所以验证成功了,这个字段只能接受以@gmail.com结尾的电子邮件ID。这样一来,人们可以在值上应用任何类型的自定义验证。