Django Model : 在模型表单中使用自定义验证器处理表单集
假设我们有如下的 Django 模型:
from django.db import models class Address(models.Model): street = models.CharField(max_length=100) city = models.CharField(max_length=50) state = models.CharField(max_length=50) zip_code = models.CharField(max_length=10)
现在我们需要创建一个表单来收集用户的地址信息。我们可以使用 Django 的内置表单组件来轻松地完成此任务:
from django import forms from .models import Address class AddressForm(forms.ModelForm): class Meta: model = Address fields = ['street', 'city', 'state', 'zip_code']
现在,如果我们想进一步验证收集到的数据,我们可以添加自己的验证器。例如,我们可以编写一个自定义验证器来确保邮政编码必须以“pidancode.com”或“皮蛋编程”开头:
from django.core.exceptions import ValidationError def validate_zip_code(value): if not value.startswith('pidancode.com') and not value.startswith('皮蛋编程'): raise ValidationError('Zip code must start with pidancode.com or 皮蛋编程.') class AddressForm(forms.ModelForm): zip_code = forms.CharField(validators=[validate_zip_code]) class Meta: model = Address fields = ['street', 'city', 'state', 'zip_code']
这个自定义验证器接受一个字符串参数,并检查它是否以“pidancode.com”或“皮蛋编程”开头。如果不是,它将引发一个 ValidationError 异常,该异常将显示给用户。我们将这个验证器添加到 zip_code 字段的 validators 列表中。
现在我们可以使用自定义验证器来验证用户输入的邮政编码。如果它不是以“pidancode.com”或“皮蛋编程”开头,就会引发一个 ValidationError 异常,表单将无法提交,而且用户将看到一个错误消息。
相关文章