@@ -40,21 +40,21 @@ def bind_model_cls(self, model_cls):
40
40
return self
41
41
42
42
def init_model (self , model , value ):
43
- """Init model with field."""
43
+ """Init model with field.
44
+
45
+ :param DomainModel model:
46
+ :param object value:
47
+ """
44
48
if value is None and self .default is not None :
45
49
value = self .default () if callable (self .default ) else self .default
46
- value = self ._converter (value )
47
50
48
- if value is None and self .required :
49
- raise AttributeError ("This field is required." )
50
-
51
- setattr (model , self .storage_name , value )
51
+ self .set_value (model , value )
52
52
53
53
def get_value (self , model , default = None ):
54
54
"""Return field's value.
55
55
56
56
:param DomainModel model:
57
- :param mixed default:
57
+ :param object default:
58
58
:rtype object:
59
59
"""
60
60
if default is not None :
@@ -67,7 +67,7 @@ def set_value(self, model, value):
67
67
"""Set field's value.
68
68
69
69
:param DomainModel model:
70
- :param mixed value:
70
+ :param object value:
71
71
"""
72
72
if value is None and self .required :
73
73
raise AttributeError ("This field is required." )
@@ -86,7 +86,11 @@ def get_builtin_type(self, model):
86
86
return self .get_value (model )
87
87
88
88
def _converter (self , value ):
89
- """Convert raw input value of the field."""
89
+ """Convert raw input value of the field.
90
+
91
+ :param object value:
92
+ :rtype object:
93
+ """
90
94
return value
91
95
92
96
@@ -160,11 +164,18 @@ def __init__(self, related_model_cls, default=None, required=False):
160
164
self .related_model_cls = related_model_cls
161
165
162
166
def _converter (self , value ):
163
- """Convert raw input value of the field."""
167
+ """Convert raw input value of the field.
168
+
169
+ :param object value:
170
+ :rtype object:
171
+ """
172
+ value = self .related_model_cls (** value ) if isinstance (value ,
173
+ dict ) else value
164
174
if not isinstance (value , self .related_model_cls ):
165
175
raise TypeError ('{0} is not valid model instance, instance of '
166
176
'{1} required' .format (value ,
167
177
self .related_model_cls ))
178
+
168
179
return value
169
180
170
181
def get_builtin_type (self , model ):
@@ -185,9 +196,17 @@ def __init__(self, related_model_cls, default=None, required=False):
185
196
self .related_model_cls = related_model_cls
186
197
187
198
def _converter (self , value ):
188
- """Convert raw input value of the field."""
199
+ """Convert raw input value of the field.
200
+
201
+ :param object value:
202
+ :rtype object:
203
+ """
189
204
if type (value ) is not self .related_model_cls .Collection :
190
- value = self .related_model_cls .Collection (value )
205
+ value = self .related_model_cls .Collection ([
206
+ self .related_model_cls (** item )
207
+ if isinstance (item , dict )
208
+ else item
209
+ for item in value ])
191
210
return value
192
211
193
212
def get_builtin_type (self , model ):
0 commit comments