from django.db.models import CharField
from django.utils.translation import ugettext_lazy as _
from . import forms
from .us_states import STATE_CHOICES, USPS_CHOICES
[docs]class USStateField(CharField):
"""
A model field that forms represent as a ``forms.USStateField`` field and
stores the two-letter U.S. state abbreviation in the database.
"""
description = _("U.S. state (two uppercase letters)")
def __init__(self, *args, **kwargs):
kwargs['choices'] = STATE_CHOICES
kwargs['max_length'] = 2
super(USStateField, self).__init__(*args, **kwargs)
def deconstruct(self):
name, path, args, kwargs = super(USStateField, self).deconstruct()
del kwargs['choices']
del kwargs['max_length']
return name, path, args, kwargs
[docs]class USPostalCodeField(CharField):
""""
A model field that forms represent as a
:class:`~localflavor.us.forms.USPSSelect`` field and stores the two-letter
U.S. Postal Service abbreviation in the database.
.. note::
If you are looking for a model field that validates U.S. ZIP codes
please use :class:`~localflavor.us.models.USZipCodeField`.
"""
description = _("U.S. postal code (two uppercase letters)")
def __init__(self, *args, **kwargs):
kwargs['choices'] = USPS_CHOICES
kwargs['max_length'] = 2
super(USPostalCodeField, self).__init__(*args, **kwargs)
def deconstruct(self):
name, path, args, kwargs = super(USPostalCodeField, self).deconstruct()
del kwargs['choices']
del kwargs['max_length']
return name, path, args, kwargs
[docs]class USZipCodeField(CharField):
"""
A model field that forms represent as a
:class:`~localflavor.us.forms.USZipCodeField` field and stores the
U.S. ZIP code in the database.
.. note::
If you are looking for a model field with a list of U.S. Postal Service
locations please use :class:`~localflavor.us.models.USPostalCodeField`.
.. versionadded:: 1.1
"""
description = _("U.S. ZIP code")
def __init__(self, *args, **kwargs):
kwargs['max_length'] = 10
super(USZipCodeField, self).__init__(*args, **kwargs)
def deconstruct(self):
name, path, args, kwargs = super(USZipCodeField, self).deconstruct()
del kwargs['max_length']
return name, path, args, kwargs
def formfield(self, **kwargs):
defaults = {'form_class': forms.USZipCodeField}
defaults.update(kwargs)
return super(USZipCodeField, self).formfield(**defaults)
[docs]class PhoneNumberField(CharField):
"""
A :class:`~django.db.models.CharField` that checks that the value
is a valid U.S.A.-style phone number (in the format ``XXX-XXX-XXXX``).
"""
description = _("Phone number")
def __init__(self, *args, **kwargs):
kwargs['max_length'] = 20
super(PhoneNumberField, self).__init__(*args, **kwargs)
def deconstruct(self):
name, path, args, kwargs = super(PhoneNumberField, self).deconstruct()
del kwargs['max_length']
return name, path, args, kwargs
def formfield(self, **kwargs):
from localflavor.us.forms import USPhoneNumberField
defaults = {'form_class': USPhoneNumberField}
defaults.update(kwargs)
return super(PhoneNumberField, self).formfield(**defaults)
[docs]class USSocialSecurityNumberField(CharField):
"""
A model field that forms represent as ``forms.USSocialSecurityNumberField``
and stores in the format ``XXX-XX-XXXX``.
.. versionadded:: 1.1
"""
description = _("Social security number")
def __init__(self, *args, **kwargs):
kwargs['max_length'] = 11
super(USSocialSecurityNumberField, self).__init__(*args, **kwargs)
def deconstruct(self):
name, path, args, kwargs = super(USSocialSecurityNumberField, self).deconstruct()
del kwargs['max_length']
return name, path, args, kwargs
def formfield(self, **kwargs):
from localflavor.us.forms import (USSocialSecurityNumberField as
USSocialSecurityNumberFieldFormField)
defaults = {'form_class': USSocialSecurityNumberFieldFormField}
defaults.update(kwargs)
return super(USSocialSecurityNumberField, self).formfield(**defaults)