File tree Expand file tree Collapse file tree 2 files changed +11
-1
lines changed Expand file tree Collapse file tree 2 files changed +11
-1
lines changed Original file line number Diff line number Diff line change @@ -157,13 +157,16 @@ def get_real_instance(self):
157
157
retrieve objects, then the complete object with it's real class/type
158
158
and all fields may be retrieved with this method.
159
159
160
+ If the model of the object's actual type does not exist (e.g. it was
161
+ removed but its ContentType still exists), this method returns self.
162
+
160
163
.. note::
161
164
Each method call executes one db query (if necessary).
162
165
Use the :meth:`~polymorphic.managers.PolymorphicQuerySet.get_real_instances`
163
166
to upcast a complete list in a single efficient query.
164
167
"""
165
168
real_model = self .get_real_instance_class ()
166
- if real_model == self .__class__ :
169
+ if real_model == self .__class__ or real_model is None :
167
170
return self
168
171
return real_model .objects .db_manager (self ._state .db ).get (pk = self .pk )
169
172
Original file line number Diff line number Diff line change @@ -321,6 +321,13 @@ def test_manual_get_real_instance(self):
321
321
o = Model2A .objects .non_polymorphic ().get (field1 = "C1" )
322
322
assert o .get_real_instance ().__class__ == Model2C
323
323
324
+ def test_get_real_instance_with_no_model_class (self ):
325
+ ctype = ContentType .objects .create (app_label = "tests" , model = "nonexisting" )
326
+ o = Model2A .objects .create (field1 = "A1" , polymorphic_ctype = ctype )
327
+
328
+ assert o .get_real_instance_class () is None
329
+ assert o .get_real_instance ().__class__ == Model2A
330
+
324
331
def test_non_polymorphic (self ):
325
332
self .create_model2abcd ()
326
333
You can’t perform that action at this time.
0 commit comments