@@ -93,6 +93,19 @@ def _converter(self, value):
9393 """
9494 return value
9595
96+ @staticmethod
97+ def _get_model_instance (model_cls , data ):
98+ """Convert dict into object of class of passed model.
99+
100+ :param class model_cls:
101+ :param object data:
102+ :rtype DomainModel:
103+ """
104+ if not isinstance (data , (model_cls , dict )):
105+ raise TypeError ('{0} is not valid type, instance of '
106+ '{1} or dict required' .format (data , model_cls ))
107+ return model_cls (** data ) if isinstance (data , dict ) else data
108+
96109
97110class Bool (Field ):
98111 """Bool field."""
@@ -160,7 +173,6 @@ class Model(Field):
160173 def __init__ (self , related_model_cls , default = None , required = False ):
161174 """Initializer."""
162175 super (Model , self ).__init__ (default = default , required = required )
163-
164176 self .related_model_cls = related_model_cls
165177
166178 def _converter (self , value ):
@@ -169,14 +181,7 @@ def _converter(self, value):
169181 :param object value:
170182 :rtype object:
171183 """
172- value = self .related_model_cls (** value ) if isinstance (value ,
173- dict ) else value
174- if not isinstance (value , self .related_model_cls ):
175- raise TypeError ('{0} is not valid model instance, instance of '
176- '{1} required' .format (value ,
177- self .related_model_cls ))
178-
179- return value
184+ return self ._get_model_instance (self .related_model_cls , value )
180185
181186 def get_builtin_type (self , model ):
182187 """Return built-in type representation of Model.
@@ -203,10 +208,8 @@ def _converter(self, value):
203208 """
204209 if type (value ) is not self .related_model_cls .Collection :
205210 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 ])
211+ self ._get_model_instance (self .related_model_cls , item )
212+ for item in value ])
210213 return value
211214
212215 def get_builtin_type (self , model ):
0 commit comments