[CASE test_every_model_has_objects_queryset_available] from django.db import models class User(models.Model): pass reveal_type(User.objects) # E: Revealed type is 'django.db.models.manager.Manager[main.User]' reveal_type(User.objects.get()) # E: Revealed type is 'main.User*' [CASE test_leave_as_is_if_objects_is_set_and_fill_typevars_with_outer_class] from django.db import models class UserManager(models.Manager[User]): def get_or_404(self) -> User: pass class User(models.Model): objects = UserManager() reveal_type(User.objects) # E: Revealed type is 'main.UserManager' reveal_type(User.objects.get()) # E: Revealed type is 'main.User*' reveal_type(User.objects.get_or_404()) # E: Revealed type is 'main.User' [CASE test_model_objects_attribute_present_in_case_of_model_cls_passed_as_parameter] from typing import Type from django.db import models class Base: def __init__(self, model_cls: Type[models.Model]): self.model_cls = model_cls class MyModel(models.Model): pass reveal_type(Base(MyModel).model_cls.objects) # E: Revealed type is 'django.db.models.manager.Manager[django.db.models.base.Model]' [CASE test_model_objects_attribute_present_in_case_of_model_cls_passed_as_generic_parameter] from typing import TypeVar, Generic, Type from django.db import models _T = TypeVar('_T', bound=models.Model) class Base(Generic[_T]): def __init__(self, model_cls: Type[_T]): self.model_cls = model_cls reveal_type(self.model_cls.objects) # E: Revealed type is 'django.db.models.manager.Manager[django.db.models.base.Model]' class MyModel(models.Model): pass base_instance = Base(MyModel) reveal_type(base_instance.model_cls.objects) # E: Revealed type is 'django.db.models.manager.Manager[main.MyModel]' class Child(Base[MyModel]): def method(self) -> None: reveal_type(self.model_cls.objects) # E: Revealed type is 'django.db.models.manager.Manager[main.MyModel]'