/django/contrib/localflavor/be/forms.py
Python | 71 lines | 32 code | 7 blank | 32 comment | 0 complexity | ab3535d08bd5eae41321f0cfceff450f MD5 | raw file
Possible License(s): BSD-3-Clause
- """
- Belgium-specific Form helpers
- """
- import re
- from django.core.validators import EMPTY_VALUES
- from django.forms import ValidationError
- from django.forms.fields import RegexField, Select
- from django.utils.translation import ugettext_lazy as _
- class BEPostalCodeField(RegexField):
- """
- A form field that validates its input as a belgium postal code.
-
- Belgium postal code is a 4 digits string. The first digit indicates
- the province (except for the 3ddd numbers that are shared by the
- eastern part of Flemish Brabant and Limburg and the and 1ddd that
- are shared by the Brussels Capital Region, the western part of
- Flemish Brabant and Walloon Brabant)
- """
- default_error_messages = {
- 'invalid': _(
- 'Enter a valid postal code in the range and format 1XXX - 9XXX.'),
- }
- def __init__(self, *args, **kwargs):
- super(BEPostalCodeField, self).__init__(r'^[1-9]\d{3}$',
- max_length=None, min_length=None, *args, **kwargs)
- class BEPhoneNumberField(RegexField):
- """
- A form field that validates its input as a belgium phone number.
- Landlines have a seven-digit subscriber number and a one-digit area code,
- while smaller cities have a six-digit subscriber number and a two-digit
- area code. Cell phones have a six-digit subscriber number and a two-digit
- area code preceeded by the number 4.
- 0d ddd dd dd, 0d/ddd.dd.dd, 0d.ddd.dd.dd,
- 0dddddddd - dialling a bigger city
- 0dd dd dd dd, 0dd/dd.dd.dd, 0dd.dd.dd.dd,
- 0dddddddd - dialling a smaller city
- 04dd ddd dd dd, 04dd/ddd.dd.dd,
- 04dd.ddd.dd.dd, 04ddddddddd - dialling a mobile number
- """
- default_error_messages = {
- 'invalid': _('Enter a valid phone number in one of the formats '
- '0x xxx xx xx, 0xx xx xx xx, 04xx xx xx xx, '
- '0x/xxx.xx.xx, 0xx/xx.xx.xx, 04xx/xx.xx.xx, '
- '0x.xxx.xx.xx, 0xx.xx.xx.xx, 04xx.xx.xx.xx, '
- '0xxxxxxxx or 04xxxxxxxx.'),
- }
- def __init__(self, *args, **kwargs):
- super(BEPhoneNumberField, self).__init__(r'^[0]\d{1}[/. ]?\d{3}[. ]\d{2}[. ]?\d{2}$|^[0]\d{2}[/. ]?\d{2}[. ]?\d{2}[. ]?\d{2}$|^[0][4]\d{2}[/. ]?\d{2}[. ]?\d{2}[. ]?\d{2}$',
- max_length=None, min_length=None, *args, **kwargs)
- class BERegionSelect(Select):
- """
- A Select widget that uses a list of belgium regions as its choices.
- """
- def __init__(self, attrs=None):
- from be_regions import REGION_CHOICES
- super(BERegionSelect, self).__init__(attrs, choices=REGION_CHOICES)
- class BEProvinceSelect(Select):
- """
- A Select widget that uses a list of belgium provinces as its choices.
- """
- def __init__(self, attrs=None):
- from be_provinces import PROVINCE_CHOICES
- super(BEProvinceSelect, self).__init__(attrs, choices=PROVINCE_CHOICES)