polymorphic.models¶
Seamless Polymorphic Inheritance for Django Models
-
class
polymorphic.models.
PolymorphicModel
(*args, **kwargs)¶ Bases:
django.db.models.base.Model
Abstract base class that provides polymorphic behaviour for any model directly or indirectly derived from it.
PolymorphicModel declares one field for internal use (
polymorphic_ctype
) and provides a polymorphic manager as the default manager (and as ‘objects’).Parameters: polymorphic_ctype_id (ForeignKey to ContentType
) – Polymorphic ctype-
get_real_instance
()¶ Upcast an object to it’s actual type.
If a non-polymorphic manager (like base_objects) has been used to retrieve objects, then the complete object with it’s real class/type and all fields may be retrieved with this method.
Note
Each method call executes one db query (if necessary). Use the
get_real_instances()
to upcast a complete list in a single efficient query.
-
get_real_instance_class
()¶ Return the actual model type of the object.
If a non-polymorphic manager (like base_objects) has been used to retrieve objects, then the real class/type of these objects may be determined using this method.
-
pre_save_polymorphic
(using='default')¶ Make sure the
polymorphic_ctype
value is correctly set on this model.
-
save
(*args, **kwargs)¶ Calls
pre_save_polymorphic()
and saves the model.
-
polymorphic_ctype
¶ The model field that stores the
ContentType
reference to the actual class.
-