polymorphic.managers¶
The manager class for use in the models.
The PolymorphicManager class¶
- class polymorphic.managers.PolymorphicManager¶
Bases:
ManagerManager for PolymorphicModel
Usually not explicitly needed, except if a custom manager or a custom queryset class is to be used.
- queryset_class¶
alias of
PolymorphicQuerySet
- create_from_super(obj, **kwargs)¶
Create an instance of this manager’s model class from the given instance of a parent class.
This is useful when “promoting” an instance down the inheritance chain.
- Parameters:
obj – An instance of a parent class of the manager’s model class.
kwargs – Additional fields to set on the new instance.
- Returns:
The newly created instance.
- get_queryset()¶
Return a new QuerySet object. Subclasses can override this method to customize the behavior of the Manager.
The PolymorphicQuerySet class¶
- class polymorphic.managers.PolymorphicQuerySet¶
Bases:
QuerySetQuerySet for PolymorphicModel
Contains the core functionality for PolymorphicModel
Usually not explicitly needed, except if a custom queryset class is to be used.
- classmethod as_manager()¶
Override base
as_manager()to return a manager extended frompolymorphic.managers.PolymorphicManager.
- __init__(*args, **kwargs)¶
- aggregate(*args, **kwargs)¶
translate the polymorphic field paths in the kwargs, then call vanilla aggregate. We need no polymorphic object retrieval for aggregate => switch it off.
- annotate(*args, **kwargs)¶
translate the polymorphic field paths in the kwargs, then call vanilla annotate. _get_real_instances will do the rest of the job after executing the query.
- bulk_create(objs, batch_size=None, ignore_conflicts=False)¶
Insert each of the instances into the database. Do not call save() on each of the instances, do not send any pre/post_save signals, and do not set the primary key attribute if it is an autoincrement field (except if features.can_return_rows_from_bulk_insert=True). Multi-table models are not supported.
- defer(*fields)¶
Translate the field paths in the args, then call vanilla defer.
Also retain a copy of the original fields passed, which we’ll need when we’re retrieving the real instance (since we’ll need to translate them again, as the model will have changed).
- delete()¶
Deletion will be done non-polymorphically because Django’s multi-table deletion mechanism is already walking the class hierarchy and producing a correct deletion graph. Introducing polymorphic querysets into the deletion process disrupts the model hierarchy/relationship traversal.
- get_real_instances(base_result_objects=None)¶
Cast a list of objects to their actual classes.
This does roughly the same as:
return [ o.get_real_instance() for o in base_result_objects ]
but more efficiently.
- Return type:
- instance_of(*args)¶
Filter the queryset to only include the classes in args (and their subclasses).
- non_polymorphic()¶
switch off polymorphic behaviour for this query. When the queryset is evaluated, only objects of the type of the base class used for this query are returned.
- not_instance_of(*args)¶
Filter the queryset to exclude the classes in args (and their subclasses).
- only(*fields)¶
Translate the field paths in the args, then call vanilla only.
Also retain a copy of the original fields passed, which we’ll need when we’re retrieving the real instance (since we’ll need to translate them again, as the model will have changed).
- order_by(*field_names)¶
translate the field paths in the args, then call vanilla order_by.