Skip to main content

MAC address model and form fields for Django apps.

Project description

Build Status https://img.shields.io/pypi/v/django-macaddress.svg

MAC Address model and form fields for Django

We use netaddr to parse and validate the MAC address. The tests aren’t complete yet.

Patches welcome: http://github.com/django-macaddress/django-macaddress

Release Notes:

For release info: https://github.com/django-macaddress/django-macaddress/releases

Getting Started

settings.MACADDRESS_DEFAULT_DIALECT

To specify a default dialect for presentation (and storage, see below), specify:

settings.MACADDRESS_DEFAULT_DIALECT = 'module.dialect_class'

where the specified value is a string composed of a parent python module name and the child dialect class name. For example:

settings.MACADDRESS_DEFAULT_DIALECT = 'netaddr.mac_eui48'

PS: old default of macaddress.mac_linux (uppercase and divided by ‘:’ ) will be used by default.

If the custom dialect is defined in a package module, you will need to define the class in or import into the package’s __init__.py.

default_dialect and format_mac

To get the default dialect for your project, import and call the default_dialect function:

>>> from macaddress import default_dialect

>>> dialect = default_dialect()

This function may, optionally, be called with an netaddr.EUI class instance as its argument. If no default is defined in settings, it will return the dialect of the provided EUI object.

The format_mac function takes an EUI instance and a dialect class (netaddr.mac_eui48 or a subclass) as its arguments. The dialect class may be specified as a string in the same manner as settings.MACADDRESS_DEFAULT_DIALECT:

>>> from netaddr import EUI, mac_bare
>>> from macaddress import format_mac

>>> mac = EUI('00:12:3c:37:64:8f')
>>> format_mac(mac, mac_bare)
'00123C37648F'
>>> format_mac(mac, 'netaddr.mac_cisco')
'0012.3c37.648f'

MACAddressField (ModelField)

This is an example model using MACAddressField:

from macaddress.fields import MACAddressField

class Computer(models.Model):
    name = models.CharField(max_length=32)
    eth0 = MACAddressField(null=True, blank=True)
    ...

The default behavior is to store the MAC Address in the database is a BigInteger. If you would, rather, store the value as a string (to, for instance, facilitate sub-string searches), you can specify integer=False and the value will be stored as a string:

class Computer(models.Model):
    name = models.CharField(max_length=32)
    eth0 = MACAddressField(blank=True, integer=False)
    ...

If you want to set unique=True on a MACAddressField that is stored as a string, you will need to set null=True and create custom clean_<foo> methods on your forms.ModelForm class for each MACAddressField that return None when the value provided is an '' (empty string):

from .models import Computer

class ComputerForm(forms.ModelForm):
    class Meta:
        model = Computer

    def clean_eth0(self):
        return self.cleaned_data['eth0'] or None

You should avoid changing the value of integer after running managy.py syncdb, unless you are using a schema migration solution like South or Django’s built-in migrations.

To Do

  • Add greater support for partial string queries when storing MACs as strings in the database.

  • Add custom validator to check for duplicate MACs when mixing string and integer storage types.

  • Add deprecation warning and timeline for changeover to default string storage.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-macaddress-1.8.0.tar.gz (7.2 kB view details)

Uploaded Source

Built Distribution

django_macaddress-1.8.0-py2.py3-none-any.whl (8.3 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file django-macaddress-1.8.0.tar.gz.

File metadata

  • Download URL: django-macaddress-1.8.0.tar.gz
  • Upload date:
  • Size: 7.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.8.5

File hashes

Hashes for django-macaddress-1.8.0.tar.gz
Algorithm Hash digest
SHA256 a75a2a67327ee513006f6b848897d56d470f6d226a6fd1ffa2a1f5f205cfe949
MD5 83c50d3e44d63f2264421cf953fd2f15
BLAKE2b-256 26fc37aa3ddc7709ab062bceddd7ed6881bd74dafb0e4de9fdee8aa41efcd9ec

See more details on using hashes here.

File details

Details for the file django_macaddress-1.8.0-py2.py3-none-any.whl.

File metadata

  • Download URL: django_macaddress-1.8.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 8.3 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.8.5

File hashes

Hashes for django_macaddress-1.8.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 5db6740e1126cf79db0a9c6ad322125eb15b3d6eeff76142df2be2048756f253
MD5 f6faf51441fb9e3e63acf49133dc1e7f
BLAKE2b-256 a7f6cd9616c6516bc507bd0d3211ecbe5a5a2447c40affb327a242d0653385c0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page