@@ -197,20 +197,15 @@ def __init__(self, *args, **kwargs):
197197 return
198198 self .__class__ .polymorphic_super_sub_accessors_replaced = True
199199
200- def create_accessor_function_for_model (model , accessor_name ):
201- NOT_PROVIDED = object ()
202-
200+ def create_accessor_function_for_model (model , field ):
203201 def accessor_function (self ):
204- attr = NOT_PROVIDED
205202 try :
206- attr = self ._state .fields_cache [accessor_name ]
207- pass
203+ rel_obj = field .get_cached_value (self )
208204 except KeyError :
209- pass
210- if attr is NOT_PROVIDED :
211205 objects = getattr (model , "_base_objects" , model .objects )
212- attr = objects .get (pk = self .pk )
213- return attr
206+ rel_obj = objects .get (pk = self .pk )
207+ field .set_cached_value (self , rel_obj )
208+ return rel_obj
214209
215210 return accessor_function
216211
@@ -223,10 +218,14 @@ def accessor_function(self):
223218 type (orig_accessor ),
224219 (ReverseOneToOneDescriptor , ForwardManyToOneDescriptor ),
225220 ):
221+
222+ field = orig_accessor .related \
223+ if isinstance (orig_accessor , ReverseOneToOneDescriptor ) else orig_accessor .field
224+
226225 setattr (
227226 self .__class__ ,
228227 name ,
229- property (create_accessor_function_for_model (model , name )),
228+ property (create_accessor_function_for_model (model , field )),
230229 )
231230
232231 def _get_inheritance_relation_fields_and_models (self ):
0 commit comments