Source code for localflavor.generic.models

from django.db import models
from django.utils.translation import ugettext_lazy as _

from .forms import BICFormField, IBANFormField
from .validators import BICValidator, IBANValidator


[docs]class IBANField(models.CharField): """ An IBAN consists of up to 34 alphanumeric characters. To limit validation to specific countries, set the 'include_countries' argument with a tuple or list of ISO 3166-1 alpha-2 codes. For example, `include_countries=('NL', 'BE, 'LU')`. A list of countries that use IBANs as part of SEPA is included for convenience. To use this feature, set `include_countries=IBAN_SEPA_COUNTRIES` as an argument to the field. Example: .. code-block:: python from django.db import models from localflavor.generic.models import IBANField from localflavor.generic.countries.sepa import IBAN_SEPA_COUNTRIES class MyModel(models.Model): iban = IBANField(include_countries=IBAN_SEPA_COUNTRIES) In addition to validating official IBANs, this field can optionally validate unofficial IBANs that have been catalogued by Nordea by setting the `use_nordea_extensions` argument to True. https://en.wikipedia.org/wiki/International_Bank_Account_Number .. versionadded:: 1.1 """ description = _('An International Bank Account Number') def __init__(self, use_nordea_extensions=False, include_countries=None, *args, **kwargs): kwargs.setdefault('max_length', 34) super(IBANField, self).__init__(*args, **kwargs) self.use_nordea_extensions = use_nordea_extensions self.include_countries = include_countries self.validators.append(IBANValidator(use_nordea_extensions, include_countries)) def deconstruct(self): name, path, args, kwargs = super(IBANField, self).deconstruct() del kwargs['max_length'] args.append(self.use_nordea_extensions) args.append(self.include_countries) return name, path, args, kwargs def to_python(self, value): value = super(IBANField, self).to_python(value) if value is not None: return value.upper().replace(' ', '').replace('-', '') return value def formfield(self, **kwargs): defaults = { 'use_nordea_extensions': self.use_nordea_extensions, 'include_countries': self.include_countries, 'form_class': IBANFormField, } defaults.update(kwargs) return super(IBANField, self).formfield(**defaults)
[docs]class BICField(models.CharField): """ A BIC consists of 8 (BIC8) or 11 (BIC11) alphanumeric characters. BICs are also known as SWIFT-BIC, BIC code, SWIFT ID, SWIFT code or ISO 9362. https://en.wikipedia.org/wiki/ISO_9362 .. versionadded:: 1.1 """ description = _('Business Identifier Code') def __init__(self, *args, **kwargs): kwargs.setdefault('max_length', 11) super(BICField, self).__init__(*args, **kwargs) self.validators.append(BICValidator()) def deconstruct(self): name, path, args, kwargs = super(BICField, self).deconstruct() del kwargs['max_length'] return name, path, args, kwargs def to_python(self, value): # BIC is always written in upper case. # https://www2.swift.com/uhbonline/books/public/en_uk/bic_policy/bic_policy.pdf value = super(BICField, self).to_python(value) if value is not None: return value.replace(' ', '').upper() return value def formfield(self, **kwargs): defaults = {'form_class': BICFormField} defaults.update(kwargs) return super(BICField, self).formfield(**defaults)