Django 模型中的自定义字段验证
本文围绕如何向特定字段添加自定义验证。例如,通过指定特定格式将电子邮件验证添加到 CharField。如何实现自定义验证有多种方法。在本文中,我们将从模型本身展示它,以便您无需在其他地方操作它。
当您尝试创建模型的实例时,将运行这些验证。从技术上讲,此验证是在您运行 ModelName.objects.create(data = data) 后实现的。
句法 -
field_name = models.Field(validators = [function 1, function 2])
Django 自定义字段验证说明
使用示例的验证器说明。考虑一个名为 geeksforgeeks 的项目,它有一个名为 geeks 的应用程序。
Refer to the following articles to check how to create a project and an app in Django.
- How to Create a Basic Project using MVT in Django?
- How to Create an App in Django ?
在极客应用的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”。
让我们检查它是否保存在数据库中。
所以验证成功了,这个字段只能接受以@gmail.com 结尾的电子邮件 ID。这样就可以对值应用任何类型的自定义验证。