你如何使用Django 1.2的表单验证器?

4
我一直在尝试使用现在包含在Django中的新验证器。我已经在我的字段上设置了validators参数,虽然我没有收到错误,但似乎验证不起作用。以下是重复此问题的控制台会话。
Python 2.7 (r27:82525, Jul 4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> import django >>> django.VERSION (1, 2, 1, 'final', 0) >>> from django.core import validators >>> from django import forms >>> field = forms.CharField(validators=[validators.MinValueValidator(2)]) >>> field.clean("s") u's'
我期望field.clean("s")抛出验证异常,因为字符串中只有一个字符。我意识到我可能误解了如何使用验证器,所以任何帮助将不胜感激。
1个回答

6
我认为你想尝试使用MinLengthValidator而不是MinValueValidatorMinValueValidator检查字段值是否大于或等于给定值。
>>> 's' > 2
True

由于 "s" > 2,因此不会引发验证错误。

使用 IntegerFieldFloatField 更合理地使用 MinValueError

>>> field = forms.FloatField(validators=[validators.MinValueValidator(2)])
>>> field.clean(5)
5.0
>>> field.clean(1.9)
...
ValidationError: [u'Ensure this value is greater than or equal to 2.']

为了确保字符串具有特定的长度,请使用MinLengthValidator
>>> field = forms.CharField(validators=[validators.MinLengthValidator(2)])
>>> field.clean('abc')
u'abc'
>>> field.clean('s')
...
ValidationError: [u'Ensure this value has at least 2 characters (it has 1).']

我的脸真红。我想这是一些愚蠢的事情,但我太累了,没能看出来。感谢你的帮助! - Jason Webb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接