fields.py 598 B

12345678910111213141516171819202122232425
  1. from django import forms
  2. from netaddr import EUI
  3. from netaddr.core import AddrFormatError
  4. __all__ = (
  5. 'MACAddressField',
  6. )
  7. class MACAddressField(forms.Field):
  8. widget = forms.CharField
  9. default_error_messages = {
  10. 'invalid': 'MAC address must be in EUI-48 format',
  11. }
  12. def to_python(self, value):
  13. value = super().to_python(value)
  14. # Validate MAC address format
  15. try:
  16. value = EUI(value.strip())
  17. except AddrFormatError:
  18. raise forms.ValidationError(self.error_messages['invalid'], code='invalid')
  19. return value