Django模型中的自定义字段验证

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”。

让我们看看它是否被保存在数据库中。

Django模型中的自定义字段验证

所以验证成功了,这个字段只能接受以@gmail.com结尾的电子邮件ID。这样一来,人们可以在值上应用任何类型的自定义验证。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程