diff options
| author | Adrian Holovaty <adrian@holovaty.com> | 2007-02-15 03:37:25 +0000 |
|---|---|---|
| committer | Adrian Holovaty <adrian@holovaty.com> | 2007-02-15 03:37:25 +0000 |
| commit | 2ec2bf698938c81ef8703699bb85eb5d32997631 (patch) | |
| tree | fa5a0ef12e0a4ba5ebe33e31e5ab42a401f8a465 | |
| parent | 174cef7361eb1b42cb990a6bcb98de493e90e8a3 (diff) | |
Fixed #1466 -- Added newforms USZipCodeField
git-svn-id: http://code.djangoproject.com/svn/django/trunk@4519 bcc190cf-cafb-0310-a4f2-bffc1f526a37
| -rw-r--r-- | django/newforms/extras/usa.py | 13 | ||||
| -rw-r--r-- | tests/regressiontests/forms/tests.py | 70 |
2 files changed, 78 insertions, 5 deletions
diff --git a/django/newforms/extras/usa.py b/django/newforms/extras/usa.py new file mode 100644 index 0000000000..22e9f68a37 --- /dev/null +++ b/django/newforms/extras/usa.py @@ -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) diff --git a/tests/regressiontests/forms/tests.py b/tests/regressiontests/forms/tests.py index db7beb96a5..08e53f617d 100644 --- a/tests/regressiontests/forms/tests.py +++ b/tests/regressiontests/forms/tests.py @@ -3055,12 +3055,12 @@ the list of errors is empty). You can also use it in {% if %} statements. <input type="submit" /> </form> -################# -# Extra widgets # -################# +############### +# Extra stuff # +############### -The newforms library comes with some extra, higher-level Widget classes that -demonstrate some of the library's abilities. +The newforms library comes with some extra, higher-level Field and Widget +classes that demonstrate some of the library's abilities. # SelectDateWidget ############################################################ @@ -3189,6 +3189,66 @@ True <option value="2016">2016</option> </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__": |
