Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/polymorphic/managers.py: 74%
23 statements
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
1"""
2The manager class for use in the models.
3"""
5from django.db import models
7from polymorphic.query import PolymorphicQuerySet
9__all__ = ("PolymorphicManager", "PolymorphicQuerySet")
12class PolymorphicManager(models.Manager):
13 """
14 Manager for PolymorphicModel
16 Usually not explicitly needed, except if a custom manager or
17 a custom queryset class is to be used.
18 """
20 queryset_class = PolymorphicQuerySet
22 @classmethod
23 def from_queryset(cls, queryset_class, class_name=None):
24 manager = super().from_queryset(queryset_class, class_name=class_name)
25 # also set our version, Django uses _queryset_class
26 manager.queryset_class = queryset_class
27 return manager
29 def get_queryset(self):
30 qs = self.queryset_class(self.model, using=self._db, hints=self._hints)
31 if self.model._meta.proxy:
32 qs = qs.instance_of(self.model)
33 return qs
35 def __str__(self):
36 return "{} (PolymorphicManager) using {}".format(
37 self.__class__.__name__,
38 self.queryset_class.__name__,
39 )
41 # Proxied methods
42 def non_polymorphic(self):
43 return self.all().non_polymorphic()
45 def instance_of(self, *args):
46 return self.all().instance_of(*args)
48 def not_instance_of(self, *args):
49 return self.all().not_instance_of(*args)
51 def get_real_instances(self, base_result_objects=None):
52 return self.all().get_real_instances(base_result_objects=base_result_objects)