Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed #3876 -- Added Australian local flavour. Thanks, Matthew Flanagan.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@4955 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 8fafee4de034cd00ac4dc62848708ded44aa830b 1 parent 1245b5c
@freakboy3742 freakboy3742 authored
View
1  AUTHORS
@@ -88,6 +88,7 @@ answer newbie questions, and generally made Django that much better:
Dirk Eschler <dirk.eschler@gmx.net>
Marc Fargas <telenieko@telenieko.com>
favo@exoweb.net
+ Matthew Flanagan <http://wadofstuff.blogspot.com>
Eric Floehr <eric@intellovations.com>
Jorge Gajon <gajon@gajon.org>
gandalf@owca.info
View
0  django/contrib/localflavor/au/__init__.py
No changes.
View
17 django/contrib/localflavor/au/au_states.py
@@ -0,0 +1,17 @@
+"""
+An alphabetical list of states for use as `choices` in a formfield.
+
+This exists in this standalone file so that it's only imported into memory
+when explicitly needed.
+"""
+
+STATE_CHOICES = (
+ ('ACT', 'Australian Capital Territory'),
+ ('NSW', 'New South Wales'),
+ ('NT', 'Northern Territory'),
+ ('QLD', 'Queensland'),
+ ('SA', 'South Australia'),
+ ('TAS', 'Tasmania'),
+ ('VIC', 'Victoria'),
+ ('WA', 'Western Australia'),
+)
View
43 django/contrib/localflavor/au/forms.py
@@ -0,0 +1,43 @@
+"""
+Australian-specific Form helpers
+"""
+
+from django.newforms import ValidationError
+from django.newforms.fields import Field, RegexField, Select, EMPTY_VALUES
+from django.newforms.util import smart_unicode
+from django.utils.translation import gettext
+import re
+
+PHONE_DIGITS_RE = re.compile(r'^(\d{10})$')
+
+class AUPostCodeField(RegexField):
+ """Australian post code field."""
+ def __init__(self, *args, **kwargs):
+ super(AUPostCodeField, self).__init__(r'^\d{4}$',
+ max_length=None, min_length=None,
+ error_message=gettext(u'Enter a 4 digit post code.'),
+ *args, **kwargs)
+
+class AUPhoneNumberField(Field):
+ """Australian phone number field."""
+ def clean(self, value):
+ """Validate a phone number. Strips parentheses, whitespace and
+ hyphens.
+ """
+ super(AUPhoneNumberField, self).clean(value)
+ if value in EMPTY_VALUES:
+ return u''
+ value = re.sub('(\(|\)|\s+|-)', '', smart_unicode(value))
+ phone_match = PHONE_DIGITS_RE.search(value)
+ if phone_match:
+ return u'%s' % phone_match.group(1)
+ raise ValidationError(u'Phone numbers must contain 10 digits.')
+
+class AUStateSelect(Select):
+ """
+ A Select widget that uses a list of Australian states/territories as its
+ choices.
+ """
+ def __init__(self, attrs=None):
+ from au_states import STATE_CHOICES # relative import
+ super(AUStateSelect, self).__init__(attrs, choices=STATE_CHOICES)
View
130 tests/regressiontests/forms/localflavor.py
@@ -882,4 +882,134 @@
Traceback (most recent call last):
...
ValidationError: [u'Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format.']
+
+## AUPostCodeField ##########################################################
+
+A field that accepts a four digit Australian post code.
+
+>>> from django.contrib.localflavor.au.forms import AUPostCodeField
+>>> f = AUPostCodeField()
+>>> f.clean('1234')
+u'1234'
+>>> f.clean('2000')
+u'2000'
+>>> f.clean('abcd')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a 4 digit post code.']
+>>> f.clean('20001')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a 4 digit post code.']
+>>> 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 = AUPostCodeField(required=False)
+>>> f.clean('1234')
+u'1234'
+>>> f.clean('2000')
+u'2000'
+>>> f.clean('abcd')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a 4 digit post code.']
+>>> f.clean('20001')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a 4 digit post code.']
+>>> f.clean(None)
+u''
+>>> f.clean('')
+u''
+
+## AUPhoneNumberField ########################################################
+
+A field that accepts a 10 digit Australian phone number.
+llows spaces and parentheses around area code.
+
+>>> from django.contrib.localflavor.au.forms import AUPhoneNumberField
+>>> f = AUPhoneNumberField()
+>>> f.clean('1234567890')
+u'1234567890'
+>>> f.clean('0213456789')
+u'0213456789'
+>>> f.clean('02 13 45 67 89')
+u'0213456789'
+>>> f.clean('(02) 1345 6789')
+u'0213456789'
+>>> f.clean('(02) 1345-6789')
+u'0213456789'
+>>> f.clean('(02)1345-6789')
+u'0213456789'
+>>> f.clean('0408 123 456')
+u'0408123456'
+>>> f.clean('123')
+Traceback (most recent call last):
+...
+ValidationError: [u'Phone numbers must contain 10 digits.']
+>>> f.clean('1800DJANGO')
+Traceback (most recent call last):
+...
+ValidationError: [u'Phone numbers must contain 10 digits.']
+>>> 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 = AUPhoneNumberField(required=False)
+>>> f.clean('1234567890')
+u'1234567890'
+>>> f.clean('0213456789')
+u'0213456789'
+>>> f.clean('02 13 45 67 89')
+u'0213456789'
+>>> f.clean('(02) 1345 6789')
+u'0213456789'
+>>> f.clean('(02) 1345-6789')
+u'0213456789'
+>>> f.clean('(02)1345-6789')
+u'0213456789'
+>>> f.clean('0408 123 456')
+u'0408123456'
+>>> f.clean('123')
+Traceback (most recent call last):
+...
+ValidationError: [u'Phone numbers must contain 10 digits.']
+>>> f.clean('1800DJANGO')
+Traceback (most recent call last):
+...
+ValidationError: [u'Phone numbers must contain 10 digits.']
+>>> f.clean(None)
+u''
+>>> f.clean('')
+u''
+
+## AUStateSelect #############################################################
+
+AUStateSelect is a Select widget that uses a list of Australian
+states/territories as its choices.
+
+>>> from django.contrib.localflavor.au.forms import AUStateSelect
+>>> f = AUStateSelect()
+>>> print f.render('state', 'NSW')
+<select name="state">
+<option value="ACT">Australian Capital Territory</option>
+<option value="NSW" selected="selected">New South Wales</option>
+<option value="NT">Northern Territory</option>
+<option value="QLD">Queensland</option>
+<option value="SA">South Australia</option>
+<option value="TAS">Tasmania</option>
+<option value="VIC">Victoria</option>
+<option value="WA">Western Australia</option>
+</select>
"""
Please sign in to comment.
Something went wrong with that request. Please try again.