@@ -37,82 +37,90 @@ def bind_model_cls(self, model_cls):
3737 'could not be rebound to "{2}"' .format (
3838 self , self .model_cls , model_cls ))
3939 self .model_cls = model_cls
40- return self . name , self
40+ return self
4141
4242 def init_model (self , model , value ):
4343 """Init model with field."""
4444 if value is None and self .default is not None :
4545 value = self .default () if callable (self .default ) else self .default
46- value = self .converter (value )
46+ value = self ._converter (value )
4747
4848 if value is None and self .required :
4949 raise AttributeError ("This field is required." )
5050
5151 setattr (model , self .storage_name , value )
5252
53- def get_value (self , model ):
54- """Return field's value."""
55- return getattr (model , self .storage_name )
53+ def get_value (self , model , default = None ):
54+ """Return field's value.
55+
56+ :param DomainModel model:
57+ :param mixed default:
58+ """
59+ if default is not None :
60+ default = self ._converter (default )
61+
62+ value = getattr (model , self .storage_name )
63+ return value if value is not None else default
5664
5765 def set_value (self , model , value ):
5866 """Set field's value."""
5967 if value is None and self .required :
6068 raise AttributeError ("This field is required." )
6169
6270 if value is not None :
63- value = self .converter (value )
71+ value = self ._converter (value )
6472
6573 setattr (model , self .storage_name , value )
6674
67- def converter (self , value ):
75+ def _converter (self , value ):
6876 """Convert raw input value of the field."""
6977 return value
7078
7179
7280class Bool (Field ):
7381 """Bool field."""
7482
75- def converter (self , value ):
83+ def _converter (self , value ):
7684 """Convert raw input value of the field."""
7785 return bool (value )
7886
7987
8088class Int (Field ):
8189 """Int field."""
8290
83- def converter (self , value ):
91+ def _converter (self , value ):
8492 """Convert raw input value of the field."""
8593 return int (value )
8694
8795
8896class Float (Field ):
8997 """Float field."""
9098
91- def converter (self , value ):
99+ def _converter (self , value ):
92100 """Convert raw input value of the field."""
93101 return float (value )
94102
95103
96104class String (Field ):
97105 """String field."""
98106
99- def converter (self , value ):
107+ def _converter (self , value ):
100108 """Convert raw input value of the field."""
101109 return str (value )
102110
103111
104112class Binary (Field ):
105113 """Binary field."""
106114
107- def converter (self , value ):
115+ def _converter (self , value ):
108116 """Convert raw input value of the field."""
109117 return six .binary_type (value )
110118
111119
112120class Date (Field ):
113121 """Date field."""
114122
115- def converter (self , value ):
123+ def _converter (self , value ):
116124 """Convert raw input value of the field."""
117125 if not isinstance (value , datetime .date ):
118126 raise TypeError ('{0} is not valid date' .format (value ))
@@ -122,7 +130,7 @@ def converter(self, value):
122130class DateTime (Field ):
123131 """Date and time field."""
124132
125- def converter (self , value ):
133+ def _converter (self , value ):
126134 """Convert raw input value of the field."""
127135 if not isinstance (value , datetime .datetime ):
128136 raise TypeError ('{0} is not valid date and time' )
@@ -138,7 +146,7 @@ def __init__(self, related_model_cls, default=None, required=False):
138146
139147 self .related_model_cls = related_model_cls
140148
141- def converter (self , value ):
149+ def _converter (self , value ):
142150 """Convert raw input value of the field."""
143151 if not isinstance (value , self .related_model_cls ):
144152 raise TypeError ('{0} is not valid model instance, instance of '
@@ -155,7 +163,7 @@ def __init__(self, related_model_cls, default=None, required=False):
155163 super (Collection , self ).__init__ (default = default , required = required )
156164 self .related_model_cls = related_model_cls
157165
158- def converter (self , value ):
166+ def _converter (self , value ):
159167 """Convert raw input value of the field."""
160168 if type (value ) is not self .related_model_cls .Collection :
161169 value = self .related_model_cls .Collection (value )
0 commit comments