Django:所有验证的models.Field.validate()会节省大量的代码编写吗?
我是否认为这一切都错了,还是我错过了一些显而易见的东西Django:所有验证的models.Field.validate()会节省大量的代码编写吗?,django,django-forms,django-models,Django,Django Forms,Django Models,我是否认为这一切都错了,还是我错过了一些显而易见的东西 Python的风格指南说代码越少越好(我不认为这是主观的……这是事实),所以考虑一下。 将表单用于所有验证意味着要编写带有自定义验证的模型字段子类,您必须: 子类模型.字段 子类forms.Field 将自定义验证添加到forms.Field子类 将自定义表单字段设置为自定义模型字段的默认表单字段 如果要执行验证,请始终使用django模型表单 在模型中进行所有验证后,您只需: 子类模型.字段 向models.Field子类添加自定义验证
Python的风格指南说代码越少越好(我不认为这是主观的……这是事实),所以考虑一下。 将表单用于所有验证意味着要编写带有自定义验证的模型字段子类,您必须:
有没有一种方法可以做到这一点,而不必编写Django团队并等待他们修复此错误?这种事情在Django的开发版本中已经是可能的: 验证一个文件有三个步骤 模型,并且所有三个都由 模型的
full\u clean()
方法。大部分
此时,将调用此方法
通过ModelForm
自动执行。你只需要
如果您计划执行,请调用full\u clean()
自己处理验证错误
看
e、 g.(作为模型课程的一部分):
ModelForm
的验证过程将调用模型的clean
方法,根据:
作为其验证过程的一部分,
ModelForm
将调用clean()
方法
模型上具有
表单上相应的字段。如果
您已排除任何模型字段,
验证将不会在这些服务器上运行
领域。也,
您的模型的clean()
方法将
在任何唯一性检查之前调用
这是我们制造的。有关详细信息,请参见验证对象
有关模型的详细信息
clean()
hook
它已经被修复,将在Django 1.2中使用。Nice。这是我去年对Django的主要看法。除了原型设计和管理,我讨厌使用模型表单。我不能告诉你我有多激动,他们正在解决这个问题。谢谢你在我的帖子中添加了s。我不知道你可以这么做(也就是说,懒得准备降价)。你的回答告诉我,如果我在模型上定义clean(),我就不需要运行super(MyModel,self)。clean()了吗?这纯粹是为了我?
def clean(self):
from django.core.exceptions import ValidationError
# Don't allow draft entries to have a pub_date.
if self.status == 'draft' and self.pub_date is not None:
raise ValidationError('Draft entries may not have a publication date.')
# Set the pub_date for published items if it hasn't been set already.
if self.status == 'published' and self.pub_date is None:
self.pub_date = datetime.datetime.now()