|
71 | 71 | class MyModel(models.Model):
|
72 | 72 | objects = NewManager()
|
73 | 73 |
|
| 74 | +- case: from_queryset_generated_manager_imported_from_other_module |
| 75 | + main: | |
| 76 | + from myapp.models import MyModel |
| 77 | + reveal_type(MyModel.objects) # N: Revealed type is "myapp.querysets.NewManager[myapp.models.MyModel]" |
| 78 | + reveal_type(MyModel.objects.get()) # N: Revealed type is "myapp.models.MyModel" |
| 79 | + reveal_type(MyModel.objects.queryset_method()) # N: Revealed type is "myapp.querysets.ModelQuerySet" |
| 80 | + reveal_type(MyModel.objects.queryset_method_2()) # N: Revealed type is "typing.Iterable[myapp.querysets.Custom]" |
| 81 | + reveal_type(MyModel.objects.queryset_method_3()) # N: Revealed type is "builtins.str" |
| 82 | + reveal_type(MyModel.objects.queryset_method_4([])) # N: Revealed type is "None" |
| 83 | + reveal_type(MyModel.objects.filter(id=1).queryset_method()) # N: Revealed type is "myapp.querysets.ModelQuerySet" |
| 84 | + reveal_type(MyModel.objects.filter(id=1)) # N: Revealed type is "myapp.querysets.ModelQuerySet[myapp.models.MyModel]" |
| 85 | + installed_apps: |
| 86 | + - myapp |
| 87 | + files: |
| 88 | + - path: myapp/__init__.py |
| 89 | + - path: myapp/querysets.py |
| 90 | + content: | |
| 91 | + from typing import TYPE_CHECKING, Iterable, Sequence |
| 92 | + from django.db import models |
| 93 | + from django.db.models.manager import BaseManager |
| 94 | + if TYPE_CHECKING: |
| 95 | + from .models import MyModel |
| 96 | +
|
| 97 | + class Custom: |
| 98 | + ... |
| 99 | +
|
| 100 | + class ModelQuerySet(models.QuerySet["MyModel"]): |
| 101 | + def queryset_method(self) -> "ModelQuerySet": |
| 102 | + return self.filter() |
| 103 | +
|
| 104 | + def queryset_method_2(self) -> Iterable[Custom]: |
| 105 | + return [] |
| 106 | +
|
| 107 | + def queryset_method_3(self) -> str: |
| 108 | + return 'hello' |
| 109 | +
|
| 110 | + def queryset_method_4(self, arg: Sequence) -> None: |
| 111 | + return None |
| 112 | +
|
| 113 | + NewManager = BaseManager.from_queryset(ModelQuerySet) |
| 114 | +
|
| 115 | + - path: myapp/models.py |
| 116 | + content: | |
| 117 | + from django.db import models |
| 118 | + from .querysets import NewManager |
| 119 | +
|
| 120 | + class MyModel(models.Model): |
| 121 | + objects = NewManager() |
| 122 | +
|
74 | 123 | - case: from_queryset_with_manager
|
75 | 124 | main: |
|
76 | 125 | from myapp.models import MyModel
|
|
0 commit comments