Source code for localflavor.dk.forms
"""
Denmark specific Form helpers.
"""
from __future__ import unicode_literals
from django.core.exceptions import ValidationError
from django.forms import fields, widgets
from django.utils.translation import ugettext_lazy as _
from .dk_municipalities import DK_MUNICIPALITIES
from .dk_postalcodes import DK_POSTALCODES
def postal_code_validator(value):
if value not in [zip for zip, city in DK_POSTALCODES]:
raise ValidationError(_('Enter a postal code in the format XXXX.'))
[docs]class DKPostalCodeField(fields.CharField):
"""
An Input widget that uses a list of Danish postal codes as valid input.
"""
default_validators = [postal_code_validator]
[docs]class DKMunicipalitySelect(widgets.Select):
"""
A Select widget that uses a list of Danish municipalities (kommuner)
as its choices.
"""
def __init__(self, attrs=None, *args, **kwargs):
super(DKMunicipalitySelect, self).__init__(
attrs,
choices=DK_MUNICIPALITIES,
*args,
**kwargs
)
[docs]class DKPhoneNumberField(fields.RegexField):
"""
Field with phone number validation. Requires a phone number with
8 digits and optional country code
"""
default_error_messages = {
'invalid': _(
'A phone number must be 8 digits and may have country code'
),
}
def __init__(self, max_length=None, min_length=None, *args, **kwargs):
super(DKPhoneNumberField, self).__init__(
r'^(?:\+45)? ?(\d{2}\s?\d{2}\s?\d{2}\s?\d{2})$',
max_length,
min_length,
*args,
**kwargs
)