@@ -134,8 +134,9 @@ class Field(BaseField):
134134
135135@six .add_metaclass (AdapterMetaClass )
136136class Adapter (BaseField ):
137- def __init__ (self , data = None , * args , ** kwargs ):
137+ def __init__ (self , data = None , instance = None , * args , ** kwargs ):
138138 self .data = data
139+ self .instance = instance
139140
140141 super (Adapter , self ).__init__ (* args , ** kwargs )
141142
@@ -151,16 +152,22 @@ def get_fields(self):
151152 return copy .deepcopy (self .declared_fields )
152153
153154 def adapt (self , data = None ):
154- meta = getattr (self , 'Meta' , None )
155- model_cls = getattr (meta , 'model' , dict )
156- obj = model_cls ()
155+ instance = self .get_instance ()
157156 for field_name , field in self .fields .iteritems ():
158157 value = field .get_attribute (data or self .data )
159158 if value is undefined :
160159 continue
161160 adapted_value = field .adapt (value )
162- if isinstance (obj , collections .Mapping ):
163- obj [field_name ] = adapted_value
161+ if isinstance (instance , collections .Mapping ):
162+ instance [field_name ] = adapted_value
164163 else :
165- setattr (obj , field_name , adapted_value )
166- return obj
164+ setattr (instance , field_name , adapted_value )
165+ return instance
166+
167+ def get_instance (self ):
168+ if self .instance :
169+ return self .instance
170+ else :
171+ meta = getattr (self , 'Meta' , None )
172+ model_cls = getattr (meta , 'model' , dict )
173+ return model_cls ()
0 commit comments