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

1""" 

2The manager class for use in the models. 

3""" 

4 

5from django.db import models 

6 

7from polymorphic.query import PolymorphicQuerySet 

8 

9__all__ = ("PolymorphicManager", "PolymorphicQuerySet") 

10 

11 

12class PolymorphicManager(models.Manager): 

13 """ 

14 Manager for PolymorphicModel 

15 

16 Usually not explicitly needed, except if a custom manager or 

17 a custom queryset class is to be used. 

18 """ 

19 

20 queryset_class = PolymorphicQuerySet 

21 

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 

28 

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 

34 

35 def __str__(self): 

36 return "{} (PolymorphicManager) using {}".format( 

37 self.__class__.__name__, 

38 self.queryset_class.__name__, 

39 ) 

40 

41 # Proxied methods 

42 def non_polymorphic(self): 

43 return self.all().non_polymorphic() 

44 

45 def instance_of(self, *args): 

46 return self.all().instance_of(*args) 

47 

48 def not_instance_of(self, *args): 

49 return self.all().not_instance_of(*args) 

50 

51 def get_real_instances(self, base_result_objects=None): 

52 return self.all().get_real_instances(base_result_objects=base_result_objects)