@@ -197,20 +197,15 @@ def __init__(self, *args, **kwargs):
197
197
return
198
198
self .__class__ .polymorphic_super_sub_accessors_replaced = True
199
199
200
- def create_accessor_function_for_model (model , accessor_name ):
201
- NOT_PROVIDED = object ()
202
-
200
+ def create_accessor_function_for_model (model , field ):
203
201
def accessor_function (self ):
204
- attr = NOT_PROVIDED
205
202
try :
206
- attr = self ._state .fields_cache [accessor_name ]
207
- pass
203
+ rel_obj = field .get_cached_value (self )
208
204
except KeyError :
209
- pass
210
- if attr is NOT_PROVIDED :
211
205
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
214
209
215
210
return accessor_function
216
211
@@ -223,10 +218,14 @@ def accessor_function(self):
223
218
type (orig_accessor ),
224
219
(ReverseOneToOneDescriptor , ForwardManyToOneDescriptor ),
225
220
):
221
+
222
+ field = orig_accessor .related \
223
+ if isinstance (orig_accessor , ReverseOneToOneDescriptor ) else orig_accessor .field
224
+
226
225
setattr (
227
226
self .__class__ ,
228
227
name ,
229
- property (create_accessor_function_for_model (model , name )),
228
+ property (create_accessor_function_for_model (model , field )),
230
229
)
231
230
232
231
def _get_inheritance_relation_fields_and_models (self ):
0 commit comments