模型层的数据验证?

Data validation on model layer?

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

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

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

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

根据 Django 文档:

Model.clean()
This method should be used to provide custom model validation, and to modify attributes on your model if desired.

This method should be overridden to perform custom validation on your model.

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

A validator is a callable that takes a value and raises a ValidationError if it doesn’t meet some criteria. Validators can be useful for re-using validation logic between different types of fields.

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

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

Clean 方法既验证又 return 一个值,该值可能会根据要求稍作修改。