【发布时间】:2015-08-17 11:41:34
【问题描述】:
我正在尝试在我的 Django 1.8 应用程序中实现通用视图,以便 Django 可以为我处理验证/重定向循环。
我已经创建了一个模型:
class Customer(models.Model):
custid = models.CharField(max_length=4, verbose_name='CID (4 alphanumeric uppercase)', validators=[validators.CIDValidator])
customer_shortcode = models.CharField(max_length=7, verbose_name='Customer Code (7 chars, uppercase, no spaces)', validators=[validators.ShortnameValidator])
description = models.CharField(max_length=30, blank=True)
并为我的两个验证字段中的每一个定义了一个验证器:
class CIDValidator(RegexValidator):
regex = r'^[A-Z0-9]{4}$'
message = 'CID is a 4-character uppercase alphanumeric value'
class ShortnameValidator(RegexValidator):
regex = r'^[A-Z0-9_]{1,7}$'
message = 'Shortname should be uppercase, no spaces, alphanumeric'
(此时,我预计管理界面会在我添加客户时使用验证器,但事实并非如此)
对于实际应用,我为 Customer 类创建了一个 ModelForm:
class CustomerForm(ModelForm):
class Meta:
model = Customer
fields = ['custid', 'customer_shortcode', 'description']
还有一个继承自 CreateView 的 View 类:
class CustomerCreateView(CreateView):
model = Customer
form_class = CustomerForm
def get_success_url(self):
return reverse('customer_list')
当我在生成的表单中输入无效数据时,我仍然没有收到验证错误。
据我所知,我应该只需要覆盖 ModelForm 上的 clean() 或 clean_xxx() 以进行附加验证,而不是为此,但它真的不清楚。我想在尽可能少的地方保留关于什么构成有效值的知识——ModelField 上的验证器会这样做。
这里缺少什么?我怀疑我在模型验证和表单验证之间感到困惑......
【问题讨论】:
-
@chandu - 对,我正在阅读“模型表单验证被隐式触发”。
标签: django validation