如何在没有modelform的情况下验证Django中模型层的数据? 我是否必须覆盖某些功能? 假设我在模型类中有一个CharField,我应该覆盖哪些函数来验证输入的数据类型?
我是django的新手。对不起,如果问题不具体。
答案 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方法同时验证并返回一个值,该值可能会略微修改,具体取决于要求。