MAC address field

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import re

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

MAC_RE = r'^([0-9a-fA-F]{2}([:-]?|$)){6}$'
mac_re = re.compile(MAC_RE)

class MACAddressFormField(fields.RegexField):
    default_error_messages = {
        'invalid': _(u'Enter a valid MAC address.'),
    }

    def __init__(self, *args, **kwargs):
        super(MACAddressFormField, self).__init__(mac_re, *args, **kwargs)

class MACAddressField(models.Field):
    empty_strings_allowed = False
    def __init__(self, *args, **kwargs):
        kwargs['max_length'] = 17
        super(MACAddressField, self).__init__(*args, **kwargs)

    def get_internal_type(self):
        return "CharField"

    def formfield(self, **kwargs):
        defaults = {'form_class': MACAddressFormField}
        defaults.update(kwargs)
        return super(MACAddressField, self).formfield(**defaults)

More like this

  1. Unzip a .zip file uploaded with FileBrowser by shacker 2 years ago
  2. Address model by harobed 3 years, 3 months ago
  3. Google map on admin address field by coulix 1 year, 5 months ago
  4. Storing IP address ModelField as Integer, without nasty hacks.. by sleepycal 6 months, 3 weeks ago
  5. Multiple emails form field by virhilo 1 year, 11 months ago

Comments

diverman (on February 24, 2009):

Add a method for saving in normalized format:

def get_db_prep_value(self, value):
  return filter(lambda ch: ch not in ':-', value).upper()

#

(Forgotten your password?)