@@ -192,11 +192,15 @@ def __init__(self, *args, **kwargs):
192192 return
193193 self .__class__ .polymorphic_super_sub_accessors_replaced = True
194194
195- def create_accessor_function_for_model (model , accessor_name ):
195+ def create_accessor_function_for_model (model , field ):
196196 def accessor_function (self ):
197- objects = getattr (model , "_base_objects" , model .objects )
198- attr = objects .get (pk = self .pk )
199- return attr
197+ try :
198+ rel_obj = field .get_cached_value (self )
199+ except KeyError :
200+ objects = getattr (model , "_base_objects" , model .objects )
201+ rel_obj = objects .get (pk = self .pk )
202+ field .set_cached_value (self , rel_obj )
203+ return rel_obj
200204
201205 return accessor_function
202206
@@ -209,10 +213,14 @@ def accessor_function(self):
209213 type (orig_accessor ),
210214 (ReverseOneToOneDescriptor , ForwardManyToOneDescriptor ),
211215 ):
216+
217+ field = orig_accessor .related \
218+ if isinstance (orig_accessor , ReverseOneToOneDescriptor ) else orig_accessor .field
219+
212220 setattr (
213221 self .__class__ ,
214222 name ,
215- property (create_accessor_function_for_model (model , name )),
223+ property (create_accessor_function_for_model (model , field )),
216224 )
217225
218226 def _get_inheritance_relation_fields_and_models (self ):
0 commit comments