2
# Extract of Django 1.4's db/models/fields/__init__.py file with modified
4
from django.core import exceptions
5
from django.db.models.fields import Field
6
from django.utils.translation import ugettext_lazy as _
7
from maasserver.dj14.forms import GenericIPAddressFormField
8
from maasserver.dj14.ipv6 import clean_ipv6_address
9
from maasserver.dj14.validators import ip_address_validators
12
class GenericIPAddressField(Field):
13
empty_strings_allowed = True
14
description = _("IP address")
15
default_error_messages = {}
17
def __init__(self, protocol='both', unpack_ipv4=False, *args, **kwargs):
18
self.unpack_ipv4 = unpack_ipv4
19
self.default_validators, invalid_error_message = \
20
ip_address_validators(protocol, unpack_ipv4)
21
self.default_error_messages['invalid'] = invalid_error_message
22
kwargs['max_length'] = 39
23
Field.__init__(self, *args, **kwargs)
25
def get_internal_type(self):
26
return "GenericIPAddressField"
28
def to_python(self, value):
29
if value and ':' in value:
30
return clean_ipv6_address(value,
31
self.unpack_ipv4, self.error_messages['invalid'])
34
def get_db_prep_value(self, value, connection, prepared=False):
36
value = self.get_prep_value(value)
39
def get_prep_value(self, value):
40
if value and ':' in value:
42
return clean_ipv6_address(value, self.unpack_ipv4)
43
except exceptions.ValidationError:
47
def formfield(self, **kwargs):
48
defaults = {'form_class': GenericIPAddressFormField}
49
defaults.update(kwargs)
50
return super(GenericIPAddressField, self).formfield(**defaults)