Django模型验证器不工作创建

时间:2016-11-30 06:29:36

标签: validation django-models

我有一个带有字段验证器的模型

from django.db import models
from django.core.validators import MinValueValidator, MaxValueValidator

 class MyModel(model.Model):
     name = models.CharField()
     size = models.IntegerField(validators=[MinValueValidator(1),MaxValueValidator(10)])

验证器在django管理面板中运行良好,当我尝试输入超过10的值时,它会向我显示错误消息'确保此值小于或等于到10' 并且不允许保存。

但是,当我在django shell中尝试时,验证器不起作用,它允许保存记录,我不知道验证器为什么不在这里抛出错误信息。

>>>form app.models import MyModel
>>>MyModel.objects.create(name="Some Name", size=15)
<MyModel: Some Name>

如果我错过了什么或者我在这里犯了什么错误,请你建议我。请帮我解决这个问题,这对我来说非常好,谢谢你。

6 个答案:

答案 0 :(得分:8)

Django验证主要是应用程序级别验证,而不是DB级别的验证。此外,模型验证不会自动在模型的save / create上运行。如果您想在代码中的某个时间验证您的值,那么您需要手动完成。

例如:

from django.core.exceptions import ValidationError
form app.models import MyModel

instance = MyModel(name="Some Name", size=15)
try:
    instance.full_clean()
except ValidationError:
    # Do something when validation is not passing
else:
    # Validation is ok we will save the instance
    instance.save()

您可以在django的文档https://docs.djangoproject.com/en/1.10/ref/models/instances/#validating-objects

中看到更多信息

在管理中,它会自动运行,因为所有模型表单(ModelForm)都将在表单验证的同时运行模型验证过程。

如果您需要验证数据,因为它来自不受信任的来源(用户输入),您需要使用ModelForm并仅在表单有效时保存模型。

答案 1 :(得分:3)

验证器仅在您使用ModelForm中的模型时才有效。

https://docs.djangoproject.com/en/dev/ref/validators/#how-validators-are-run

您可以通过覆盖clean()和full_clean()方法来执行模型验证

答案 2 :(得分:1)

验证器仅适用于表单和模型表单。不能与模型定义一起使用,因为它在应用程序端而不是数据库端运行。

答案 3 :(得分:0)

来自Django文档:

请注意,当您保存验证文件时,验证程序将不会自动运行 模型,但是如果您使用的是ModelForm,它将运行您的验证器 在表单中包含的任何字段中。

https://docs.djangoproject.com/en/3.1/ref/validators/#how-validators-are-run

答案 4 :(得分:0)

我遇到了同样的问题。 因此,验证器仅在您使用 Forms 和 Model Form 填写时才起作用。

但是,通过在 shell 中创建,您可能想在上线之前测试验证器。 所以这里是帮助验证验证器的附加代码。

>>>form app.models import MyModel
>>>MyModel.size.field.run_validators(value=<undesirable value>)

答案 5 :(得分:0)

您可以将其添加到模型中并在 save() 中调用。

var intList = Iterator(range(1,10))
println("data"+intList.toList)
println(intList.hasNext)