@@ -40,21 +40,21 @@ def bind_model_cls(self, model_cls):
4040 return self
4141
4242 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+ """
4448 if value is None and self .default is not None :
4549 value = self .default () if callable (self .default ) else self .default
46- value = self ._converter (value )
4750
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 )
5252
5353 def get_value (self , model , default = None ):
5454 """Return field's value.
5555
5656 :param DomainModel model:
57- :param mixed default:
57+ :param object default:
5858 :rtype object:
5959 """
6060 if default is not None :
@@ -67,7 +67,7 @@ def set_value(self, model, value):
6767 """Set field's value.
6868
6969 :param DomainModel model:
70- :param mixed value:
70+ :param object value:
7171 """
7272 if value is None and self .required :
7373 raise AttributeError ("This field is required." )
@@ -86,7 +86,11 @@ def get_builtin_type(self, model):
8686 return self .get_value (model )
8787
8888 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+ """
9094 return value
9195
9296
@@ -160,11 +164,18 @@ def __init__(self, related_model_cls, default=None, required=False):
160164 self .related_model_cls = related_model_cls
161165
162166 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
164174 if not isinstance (value , self .related_model_cls ):
165175 raise TypeError ('{0} is not valid model instance, instance of '
166176 '{1} required' .format (value ,
167177 self .related_model_cls ))
178+
168179 return value
169180
170181 def get_builtin_type (self , model ):
@@ -185,9 +196,17 @@ def __init__(self, related_model_cls, default=None, required=False):
185196 self .related_model_cls = related_model_cls
186197
187198 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+ """
189204 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 ])
191210 return value
192211
193212 def get_builtin_type (self , model ):
0 commit comments