Source code for localflavor.lk.models
"""Sri Lanka specific Model fields"""
import re
from django.core.validators import RegexValidator
from django.db import models
from django.utils.translation import gettext_lazy as _
from .forms import LKPostalCodeFormField
from .lk_districts import DISTRICTS
from .lk_provinces import PROVINCES
[docs]
class LKPostalCodeValidator(RegexValidator):
"""
A validator for Sri Lanka Postal Codes.
"""
default_error_messages = {
'invalid': _('Enter a postal code in format NNNNN'),
}
def __init__(self, *args, **kwargs):
super().__init__(re.compile(r'^[0-9]{5}$'), *args, **kwargs)
[docs]
class LKPostalCodeField(models.CharField):
"""
A model field that accepts Sri Lanka postal codes.
Format: NNNNN
Source: https://en.wikipedia.org/wiki/Postal_codes_in_Sri_Lanka
.. versionadded:: 5.0
"""
description = _("Postal Code")
def __init__(self, *args, **kwargs):
kwargs['max_length'] = 5
super().__init__(*args, **kwargs)
self.validators.append(LKPostalCodeValidator())
[docs]
def formfield(self, **kwargs):
defaults = {'form_class': LKPostalCodeFormField}
defaults.update(kwargs)
return super().formfield(**defaults)
[docs]
class LKDistrictField(models.CharField):
"""
A model field that provides an option to select
a district from the list of all Sri Lanka districts.
.. versionadded:: 5.0
"""
def __init__(self, *args, **kwargs):
kwargs['choices'] = DISTRICTS
kwargs['max_length'] = 15
super().__init__(*args, **kwargs)
[docs]
def deconstruct(self):
name, path, args, kwargs = super().deconstruct()
del kwargs['choices']
return name, path, args, kwargs
[docs]
class LKProvinceField(models.CharField):
"""
A model field that provides an option to select
a province from the list of all Sri Lanka provinces.
.. versionadded:: 5.0
"""
def __init__(self, *args, **kwargs):
kwargs['choices'] = PROVINCES
kwargs['max_length'] = 15
super().__init__(*args, **kwargs)
[docs]
def deconstruct(self):
name, path, args, kwargs = super().deconstruct()
del kwargs['choices']
return name, path, args, kwargs