Integrate with Django Forms
masterYou can integrate i18naddress into a Django forms.Form by overriding the clean() method. Use get_validation_rules to provide context-aware error messages (like postal code examples) and normalize_address to ensure the cleaned_data contains the canonical address format.
from django import forms
from i18naddress import InvalidAddressError, normalize_address, get_validation_rules
class AddressForm(forms.Form):
# ... field definitions ...
def clean(self):
clean_data = super(AddressForm, self).clean()
validation_rules = get_validation_rules(clean_data)
try:
valid_address = normalize_address(clean_data)
except InvalidAddressError as e:
errors = e.errors
valid_address = None
for field, error_code in errors.items():
if field == 'postal_code':
examples = validation_rules.postal_code_examples
msg = f'Invalid value, use format like {examples}'
else:
msg = self.ERROR_MESSAGES.get(error_code, 'Invalid field')
self.add_error(field, msg)
return valid_address or clean_data