Source code for localflavor.pe.forms

"""PE-specific Form helpers."""

from django.forms import ValidationError
from django.forms.fields import CharField, Select
from django.utils.translation import gettext_lazy as _

from .pe_region import REGION_CHOICES


[docs]class PERegionSelect(Select): """A Select widget that uses a list of Peruvian Regions as its choices.""" def __init__(self, attrs=None): super().__init__(attrs, choices=REGION_CHOICES)
[docs]class PEDNIField(CharField): """A field that validates Documento Nacional de Identidad (DNI) numbers.""" default_error_messages = { 'invalid': _("This field requires only numbers."), 'max_digits': _("This field requires 8 digits."), } def __init__(self, max_length=8, min_length=8, **kwargs): super().__init__(max_length=max_length, min_length=min_length, **kwargs)
[docs] def clean(self, value): """Value must be a string in the XXXXXXXX formats.""" value = super().clean(value) if value in self.empty_values: return value if not value.isdigit(): raise ValidationError(self.error_messages['invalid'], code='invalid') if len(value) != 8: raise ValidationError(self.error_messages['max_digits'], code='max_digits') return value
[docs]class PERUCField(CharField): """ This field validates a RUC (Registro Unico de Contribuyentes). A RUC is of the form XXXXXXXXXXX. """ default_error_messages = { 'invalid': _("This field requires only numbers."), 'max_digits': _("This field requires 11 digits."), } def __init__(self, max_length=11, min_length=11, **kwargs): super().__init__(max_length=max_length, min_length=min_length, **kwargs)
[docs] def clean(self, value): """Value must be an 11-digit number.""" value = super().clean(value) if value in self.empty_values: return value if not value.isdigit(): raise ValidationError(self.error_messages['invalid'], code='invalid') if len(value) != 11: raise ValidationError(self.error_messages['max_digits'], code='max_digits') return value