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

📅  最后修改于: 2022-05-13 01:55:35.844000             🧑  作者: Mango

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

本文围绕如何向特定字段添加自定义验证。例如,通过指定特定格式将电子邮件验证添加到 CharField。如何实现自定义验证有多种方法。在本文中,我们将从模型本身展示它,以便您无需在其他地方操作它。
当您尝试创建模型的实例时,将运行这些验证。从技术上讲,此验证是在您运行 ModelName.objects.create(data = data) 后实现的。

句法 -

field_name = models.Field(validators = [function 1, function 2]) 

Django 自定义字段验证说明

使用示例的验证器说明。考虑一个名为 geeksforgeeks 的项目,它有一个名为 geeks 的应用程序。

极客应用的models.py文件中输入以下代码。我们将使用 CharField 来试验所有字段选项。

Python3
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, 
                    )


Python3
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)


Python3
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]
                         )


现在我们将应用自定义验证,以便仅针对 google 邮件 ID 验证上述字段。创建一个接受名为value的参数的函数。现在可以对值应用任何类型的操作。因此,让我们检查一下我们的函数值是否包含@gmail.com以仅针对 google 邮件 ID 进行验证。

Python3

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)

现在让我们将此函数添加为我们的字段中的验证器。请注意,一个验证器函数可以同时用于多个字段。

Python3

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。这样就可以对值应用任何类型的自定义验证。