【发布时间】:2015-08-07 14:03:08
【问题描述】:
如何在没有 modelform 的情况下在 Django 中验证模型层上的数据? 我必须覆盖某些功能吗? 假设我在模型类中有一个 CharField,我应该重写什么函数来验证输入的数据类型?
我是 Django 新手。抱歉,如果问题不具体。
【问题讨论】:
-
可以覆盖模型保存功能
标签: django django-models django-forms django-views
如何在没有 modelform 的情况下在 Django 中验证模型层上的数据? 我必须覆盖某些功能吗? 假设我在模型类中有一个 CharField,我应该重写什么函数来验证输入的数据类型?
我是 Django 新手。抱歉,如果问题不具体。
【问题讨论】:
标签: django django-models django-forms django-views
您可以在模型字段中添加验证器: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()
此方法应用于提供自定义模型 验证,并根据需要修改模型上的属性。应该重写此方法以对您的 型号。
验证不同类型的字段,可以使用validators.
validator是一个可调用对象,它接受一个值并引发一个ValidationError如果它不符合某些标准。验证器可以是 对于在不同类型的数据之间重用验证逻辑很有用 字段。
使用validators 和覆盖Model.clean() 的区别:
验证器只验证输入,它们不返回所需的格式。如果输入无效,它只会引发ValidationError。
Clean 方法会验证并返回一个值,该值可能会根据要求稍作修改。
【讨论】: