Fixed #4469 -- Added slightly more informative error messages to max- and
min-length newform validation. Based on a patch from A. Murat Eren. git-svn-id: http://code.djangoproject.com/svn/django/trunk@5686 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
3eb1071b3d
commit
40bb32b5a4
|
@ -111,10 +111,11 @@ class CharField(Field):
|
||||||
if value in EMPTY_VALUES:
|
if value in EMPTY_VALUES:
|
||||||
return u''
|
return u''
|
||||||
value = smart_unicode(value)
|
value = smart_unicode(value)
|
||||||
if self.max_length is not None and len(value) > self.max_length:
|
value_length = len(value)
|
||||||
raise ValidationError(ugettext(u'Ensure this value has at most %d characters.') % self.max_length)
|
if self.max_length is not None and value_length > self.max_length:
|
||||||
if self.min_length is not None and len(value) < self.min_length:
|
raise ValidationError(ugettext(u'Ensure this value has at most %d characters (it has %d).') % (self.max_length, value_length))
|
||||||
raise ValidationError(ugettext(u'Ensure this value has at least %d characters.') % self.min_length)
|
if self.min_length is not None and value_length < self.min_length:
|
||||||
|
raise ValidationError(ugettext(u'Ensure this value has at least %d characters (it has %d).') % (self.min_length, value_length))
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def widget_attrs(self, widget):
|
def widget_attrs(self, widget):
|
||||||
|
|
|
@ -913,11 +913,11 @@ ValidationError: [u'This field requires only numbers.']
|
||||||
>>> f.clean('375.788.573-000')
|
>>> f.clean('375.788.573-000')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValidationError: [u'Ensure this value has at most 14 characters.']
|
ValidationError: [u'Ensure this value has at most 14 characters (it has 15).']
|
||||||
>>> f.clean('123.456.78')
|
>>> f.clean('123.456.78')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValidationError: [u'Ensure this value has at least 11 characters.']
|
ValidationError: [u'Ensure this value has at least 11 characters (it has 10).']
|
||||||
>>> f.clean('123456789555')
|
>>> f.clean('123456789555')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
|
@ -1208,11 +1208,11 @@ u'230880-3449'
|
||||||
>>> f.clean('230880343')
|
>>> f.clean('230880343')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValidationError: [u'Ensure this value has at least 10 characters.']
|
ValidationError: [u'Ensure this value has at least 10 characters (it has 9).']
|
||||||
>>> f.clean('230880343234')
|
>>> f.clean('230880343234')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValidationError: [u'Ensure this value has at most 11 characters.']
|
ValidationError: [u'Ensure this value has at most 11 characters (it has 12).']
|
||||||
>>> f.clean('abcdefghijk')
|
>>> f.clean('abcdefghijk')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
|
@ -1254,18 +1254,18 @@ ValidationError: [u'Enter a valid value.']
|
||||||
>>> f.clean('123456')
|
>>> f.clean('123456')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValidationError: [u'Ensure this value has at least 7 characters.']
|
ValidationError: [u'Ensure this value has at least 7 characters (it has 6).']
|
||||||
>>> f.clean('123456555')
|
>>> f.clean('123456555')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValidationError: [u'Ensure this value has at most 8 characters.']
|
ValidationError: [u'Ensure this value has at most 8 characters (it has 9).']
|
||||||
>>> f.clean('abcdefg')
|
>>> f.clean('abcdefg')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
ValidationError: [u'Enter a valid value.']
|
ValidationError: [u'Enter a valid value.']
|
||||||
>>> f.clean(' 1234567 ')
|
>>> f.clean(' 1234567 ')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValidationError: [u'Ensure this value has at most 8 characters.']
|
ValidationError: [u'Ensure this value has at most 8 characters (it has 9).']
|
||||||
>>> f.clean(' 12367 ')
|
>>> f.clean(' 12367 ')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
|
|
|
@ -896,7 +896,7 @@ u'1234567890'
|
||||||
>>> f.clean('1234567890a')
|
>>> f.clean('1234567890a')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValidationError: [u'Ensure this value has at most 10 characters.']
|
ValidationError: [u'Ensure this value has at most 10 characters (it has 11).']
|
||||||
|
|
||||||
CharField accepts an optional min_length parameter:
|
CharField accepts an optional min_length parameter:
|
||||||
>>> f = CharField(min_length=10, required=False)
|
>>> f = CharField(min_length=10, required=False)
|
||||||
|
@ -905,7 +905,7 @@ u''
|
||||||
>>> f.clean('12345')
|
>>> f.clean('12345')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValidationError: [u'Ensure this value has at least 10 characters.']
|
ValidationError: [u'Ensure this value has at least 10 characters (it has 5).']
|
||||||
>>> f.clean('1234567890')
|
>>> f.clean('1234567890')
|
||||||
u'1234567890'
|
u'1234567890'
|
||||||
>>> f.clean('1234567890a')
|
>>> f.clean('1234567890a')
|
||||||
|
@ -919,7 +919,7 @@ ValidationError: [u'This field is required.']
|
||||||
>>> f.clean('12345')
|
>>> f.clean('12345')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValidationError: [u'Ensure this value has at least 10 characters.']
|
ValidationError: [u'Ensure this value has at least 10 characters (it has 5).']
|
||||||
>>> f.clean('1234567890')
|
>>> f.clean('1234567890')
|
||||||
u'1234567890'
|
u'1234567890'
|
||||||
>>> f.clean('1234567890a')
|
>>> f.clean('1234567890a')
|
||||||
|
@ -1443,11 +1443,11 @@ RegexField also access min_length and max_length parameters, for convenience.
|
||||||
>>> f.clean('123')
|
>>> f.clean('123')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValidationError: [u'Ensure this value has at least 5 characters.']
|
ValidationError: [u'Ensure this value has at least 5 characters (it has 3).']
|
||||||
>>> f.clean('abc')
|
>>> f.clean('abc')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValidationError: [u'Ensure this value has at least 5 characters.']
|
ValidationError: [u'Ensure this value has at least 5 characters (it has 3).']
|
||||||
>>> f.clean('12345')
|
>>> f.clean('12345')
|
||||||
u'12345'
|
u'12345'
|
||||||
>>> f.clean('1234567890')
|
>>> f.clean('1234567890')
|
||||||
|
@ -1455,7 +1455,7 @@ u'1234567890'
|
||||||
>>> f.clean('12345678901')
|
>>> f.clean('12345678901')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValidationError: [u'Ensure this value has at most 10 characters.']
|
ValidationError: [u'Ensure this value has at most 10 characters (it has 11).']
|
||||||
>>> f.clean('12345a')
|
>>> f.clean('12345a')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
|
@ -1512,13 +1512,13 @@ EmailField also access min_length and max_length parameters, for convenience.
|
||||||
>>> f.clean('a@foo.com')
|
>>> f.clean('a@foo.com')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValidationError: [u'Ensure this value has at least 10 characters.']
|
ValidationError: [u'Ensure this value has at least 10 characters (it has 9).']
|
||||||
>>> f.clean('alf@foo.com')
|
>>> f.clean('alf@foo.com')
|
||||||
u'alf@foo.com'
|
u'alf@foo.com'
|
||||||
>>> f.clean('alf123456788@foo.com')
|
>>> f.clean('alf123456788@foo.com')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValidationError: [u'Ensure this value has at most 15 characters.']
|
ValidationError: [u'Ensure this value has at most 15 characters (it has 20).']
|
||||||
|
|
||||||
# URLField ##################################################################
|
# URLField ##################################################################
|
||||||
|
|
||||||
|
@ -1622,13 +1622,13 @@ URLField also access min_length and max_length parameters, for convenience.
|
||||||
>>> f.clean('http://f.com')
|
>>> f.clean('http://f.com')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValidationError: [u'Ensure this value has at least 15 characters.']
|
ValidationError: [u'Ensure this value has at least 15 characters (it has 12).']
|
||||||
>>> f.clean('http://example.com')
|
>>> f.clean('http://example.com')
|
||||||
u'http://example.com'
|
u'http://example.com'
|
||||||
>>> f.clean('http://abcdefghijklmnopqrstuvwxyz.com')
|
>>> f.clean('http://abcdefghijklmnopqrstuvwxyz.com')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValidationError: [u'Ensure this value has at most 20 characters.']
|
ValidationError: [u'Ensure this value has at most 20 characters (it has 37).']
|
||||||
|
|
||||||
# BooleanField ################################################################
|
# BooleanField ################################################################
|
||||||
|
|
||||||
|
@ -1800,7 +1800,7 @@ u'test@example.com'
|
||||||
>>> f.clean('longemailaddress@example.com')
|
>>> f.clean('longemailaddress@example.com')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValidationError: [u'Ensure this value has at most 20 characters.']
|
ValidationError: [u'Ensure this value has at most 20 characters (it has 28).']
|
||||||
>>> f.clean('not an e-mail')
|
>>> f.clean('not an e-mail')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
|
@ -1820,7 +1820,7 @@ u'test@example.com'
|
||||||
>>> f.clean('longemailaddress@example.com')
|
>>> f.clean('longemailaddress@example.com')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ValidationError: [u'Ensure this value has at most 20 characters.']
|
ValidationError: [u'Ensure this value has at most 20 characters (it has 28).']
|
||||||
>>> f.clean('not an e-mail')
|
>>> f.clean('not an e-mail')
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
|
@ -3271,7 +3271,7 @@ Case 2: POST with erroneous data (a redisplayed form, with errors).
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
<table>
|
<table>
|
||||||
<tr><td colspan="2"><ul class="errorlist"><li>Please make sure your passwords match.</li></ul></td></tr>
|
<tr><td colspan="2"><ul class="errorlist"><li>Please make sure your passwords match.</li></ul></td></tr>
|
||||||
<tr><th>Username:</th><td><ul class="errorlist"><li>Ensure this value has at most 10 characters.</li></ul><input type="text" name="username" value="this-is-a-long-username" maxlength="10" /></td></tr>
|
<tr><th>Username:</th><td><ul class="errorlist"><li>Ensure this value has at most 10 characters (it has 23).</li></ul><input type="text" name="username" value="this-is-a-long-username" maxlength="10" /></td></tr>
|
||||||
<tr><th>Password1:</th><td><input type="password" name="password1" value="foo" /></td></tr>
|
<tr><th>Password1:</th><td><input type="password" name="password1" value="foo" /></td></tr>
|
||||||
<tr><th>Password2:</th><td><input type="password" name="password2" value="bar" /></td></tr>
|
<tr><th>Password2:</th><td><input type="password" name="password2" value="bar" /></td></tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
Loading…
Reference in New Issue