Package expedient :: Package common :: Package utils :: Module modelfields
[hide private]
[frames] | no frames]

Source Code for Module expedient.common.utils.modelfields

 1  ''' 
 2  Created on Jul 18, 2010 
 3   
 4  @author: jnaous 
 5  ''' 
 6  import logging 
 7  from django.db import models 
 8  import formfields 
 9  from expedient.common.utils.formfields import validate_datetime 
10   
11  logger = logging.getLogger("common.utils.modelfields") 
12   
13 -class MACAddressField(models.CharField):
14 """ 15 A field that validates MAC addresses in XX:XX:XX:XX:XX:XX format. 16 """ 17 empty_strings_allowed = False 18 description = "MAC address" 19
20 - def __init__(self, *args, **kwargs):
21 kwargs['max_length'] = 17 22 super(MACAddressField, self).__init__(*args, **kwargs)
23
24 - def formfield(self, **kwargs):
25 defaults = {'form_class': formfields.MACAddressField} 26 defaults.update(kwargs) 27 return super(MACAddressField, self).formfield(**defaults)
28
29 -class LimitedIntegerField(models.IntegerField):
30 """ 31 An IntegerField with min and max values. 32 """
33 - def __init__(self, *args, **kwargs):
34 self.max_value = kwargs.pop("max_value", None) 35 self.min_value = kwargs.pop("min_value", None) 36 super(LimitedIntegerField, self).__init__(*args, **kwargs)
37
38 - def formfield(self, **kwargs):
39 defaults = {'form_class': formfields.DecOrHexIntegerField, 40 'max_value': self.max_value, 41 'min_value': self.min_value, 42 } 43 defaults.update(kwargs) 44 return super(LimitedIntegerField, self).formfield(**defaults)
45
46 -class IPNetworkField(models.CharField):
47 """ 48 A field that accepts either IP address or IP prefixes (192.168.0.0/16). 49 """ 50 empty_strings_allowed = False 51 description = "IP address or prefix" 52
53 - def __init__(self, *args, **kwargs):
54 kwargs['max_length'] = 18 55 super(IPNetworkField, self).__init__(*args, **kwargs)
56
57 - def formfield(self, **kwargs):
58 defaults = {'form_class': formfields.IPNetworkField} 59 defaults.update(kwargs) 60 return super(IPNetworkField, self).formfield(**defaults)
61
62 -class LimitedDateTimeField(models.DateTimeField):
63 """A date time field that is limited between a min and max.""" 64 65 description = "Date and time" 66
67 - def __init__(self, max_date=None, min_date=None, *args, **kwargs):
68 self.max_date = max_date 69 self.min_date = min_date 70 super(LimitedDateTimeField, self).__init__(*args, **kwargs)
71
72 - def validate(self, value, model_instance):
73 super(LimitedDateTimeField, self).validate(value, model_instance) 74 validate_datetime(value, self.min_date, self.max_date)
75
76 - def formfield(self, **kwargs):
77 defaults = { 78 "form_class": formfields.LimitedSplitDateTimeField, 79 "max_date": self.max_date, 80 "min_date": self.min_date, 81 } 82 defaults.update(kwargs) 83 return super(LimitedDateTimeField, self).formfield(**defaults)
84