模型层的数据验证?

时间:2015-08-07 14:03:09

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

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

我是django的新手。对不起,如果问题不具体。

2 个答案:

答案 0 :(得分:5)

您可以在模型字段中添加验证器: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])

答案 1 :(得分:3)

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

根据Django docs:

  

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

     

应该重写此方法以对您的方法执行自定义验证   模型。

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

  

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

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

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

Clean方法同时验证并返回一个值,该值可能会略微修改,具体取决于要求。