【问题标题】:Data validation on model layer?模型层的数据验证?
【发布时间】:2015-08-07 14:03:08
【问题描述】:

如何在没有 modelform 的情况下在 Django 中验证模型层上的数据? 我必须覆盖某些功能吗? 假设我在模型类中有一个 CharField,我应该重写什么函数来验证输入的数据类型?

我是 Django 新手。抱歉,如果问题不具体。

【问题讨论】:

  • 可以覆盖模型保存功能

标签: django django-models django-forms django-views


【解决方案1】:

您可以在模型字段中添加验证器:https://docs.djangoproject.com/en/1.8/ref/validators/#writing-validators 来自文档:

from django.db import models
from django.core.exceptions import ValidationError

def validate_even(value):
    if value % 2 != 0:
        raise ValidationError('%s is not an even number' % value)

class MyModel(models.Model):
    even_field = models.IntegerField(validators=[validate_even])

【讨论】:

    【解决方案2】:

    您可以使用Model.clean()在模型层提供数据验证。

    根据 Django 文档:

    Model.clean()
    此方法应用于提供自定义模型 验证,并根据需要修改模型上的属性。

    应该重写此方法以对您的 型号。

    验证不同类型的字段,可以使用validators.

    validator 是一个可调用对象,它接受一个值并引发一个 ValidationError 如果它不符合某些标准。验证器可以是 对于在不同类型的数据之间重用验证逻辑很有用 字段。

    使用validators 和覆盖Model.clean() 的区别:

    验证器只验证输入,它们不返回所需的格式。如果输入无效,它只会引发ValidationError

    Clean 方法会验证并返回一个值,该值可能会根据要求稍作修改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      相关资源
      最近更新 更多