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的风格指南说代码越少越好(我不认为这是主观的……这是事实),所以考虑一下。 将表单用于所有验证意味着要编写带有自定义验证的模型字段子类,您必须:

  • 子类模型.字段
  • 子类forms.Field
  • 将自定义验证添加到forms.Field子类
  • 将自定义表单字段设置为自定义模型字段的默认表单字段
  • 如果要执行验证,请始终使用django模型表单
  • 在模型中进行所有验证后,您只需:

  • 子类模型.字段
  • 向models.Field子类添加自定义验证
  • 现在,您可以在API中使用模型字段,绕过所有web表单的使用,并且仍然可以在最低级别进行验证。如果使用web表单,验证将向上传播


    有没有一种方法可以做到这一点,而不必编写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()