Fixed #1466 -- Added newforms USZipCodeField

git-svn-id: http://code.djangoproject.com/svn/django/trunk@4519 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Adrian Holovaty 2007-02-15 03:37:25 +00:00
parent 174cef7361
commit 2ec2bf6989
2 changed files with 78 additions and 5 deletions

View File

@ -0,0 +1,13 @@
"""
USA-specific Form helpers
"""
from django.newforms.fields import RegexField
from django.utils.translation import gettext
class USZipCodeField(RegexField):
def __init__(self, *args, **kwargs):
super(USZipCodeField, self).__init__(r'^\d{5}(?:-\d{4})?$',
max_length=None, min_length=None,
error_message=gettext(u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'),
*args, **kwargs)

View File

@ -3055,12 +3055,12 @@ the list of errors is empty). You can also use it in {% if %} statements.
<input type="submit" /> <input type="submit" />
</form> </form>
################# ###############
# Extra widgets # # Extra stuff #
################# ###############
The newforms library comes with some extra, higher-level Widget classes that The newforms library comes with some extra, higher-level Field and Widget
demonstrate some of the library's abilities. classes that demonstrate some of the library's abilities.
# SelectDateWidget ############################################################ # SelectDateWidget ############################################################
@ -3189,6 +3189,66 @@ True
<option value="2016">2016</option> <option value="2016">2016</option>
</select> </select>
# USZipCodeField ##############################################################
USZipCodeField validates that the data is either a five-digit U.S. zip code or
a zip+4.
>>> from django.newforms.extras.usa import USZipCodeField
>>> f = USZipCodeField()
>>> f.clean('60606')
u'60606'
>>> f.clean(60606)
u'60606'
>>> f.clean('04000')
u'04000'
>>> f.clean('4000')
Traceback (most recent call last):
...
ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.']
>>> f.clean('60606-1234')
u'60606-1234'
>>> f.clean('6060-1234')
Traceback (most recent call last):
...
ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.']
>>> f.clean('60606-')
Traceback (most recent call last):
...
ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.']
>>> f.clean(None)
Traceback (most recent call last):
...
ValidationError: [u'This field is required.']
>>> f.clean('')
Traceback (most recent call last):
...
ValidationError: [u'This field is required.']
>>> f = USZipCodeField(required=False)
>>> f.clean('60606')
u'60606'
>>> f.clean(60606)
u'60606'
>>> f.clean('04000')
u'04000'
>>> f.clean('4000')
Traceback (most recent call last):
...
ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.']
>>> f.clean('60606-1234')
u'60606-1234'
>>> f.clean('6060-1234')
Traceback (most recent call last):
...
ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.']
>>> f.clean('60606-')
Traceback (most recent call last):
...
ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.']
>>> f.clean(None)
u''
>>> f.clean('')
u''
""" """
if __name__ == "__main__": if __name__ == "__main__":