Как вы используете валидаторы формы django 1.2? - PullRequest
4 голосов
/ 25 августа 2010

Я пытался использовать новые валидаторы, которые теперь включены в 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 голосов
/ 25 августа 2010

Я думаю, что вы хотите попробовать MinLengthValidator вместо MinValueValidator.

. MinValueValidator проверяет, что значение поля больше или равно заданному значению.

>>> 's' > 2
True

Поскольку "s" > 2, ошибка проверки не возникает.

Было бы более разумно использовать MinValueError с IntegerField или FloatField.

>>> 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).']
...