1
1
import datetime
2
2
from collections .abc import AsyncIterator , Collection , Iterable , Iterator , MutableMapping , Sequence , Sized
3
- from typing import Any , Generic , NamedTuple , TypeVar , overload
3
+ from typing import Any , Generic , NamedTuple , overload
4
4
5
5
from django .db .backends .utils import _ExecuteQuery
6
6
from django .db .models import Manager
7
7
from django .db .models .base import Model
8
8
from django .db .models .expressions import Combinable , OrderBy
9
9
from django .db .models .sql .query import Query , RawQuery
10
10
from django .utils .functional import cached_property
11
- from typing_extensions import Self , TypeAlias
11
+ from typing_extensions import Self , TypeAlias , TypeVar
12
12
13
- _T = TypeVar ("_T" , bound = Model , covariant = True )
14
- _Row = TypeVar ("_Row" , covariant = True )
13
+ _T = TypeVar ("_T" , covariant = True )
14
+ _Model = TypeVar ("_Model" , bound = Model , covariant = True )
15
+ _Row = TypeVar ("_Row" , covariant = True , default = _Model ) # ONLY use together with _Model
15
16
_QS = TypeVar ("_QS" , bound = _QuerySet )
16
17
_TupleT = TypeVar ("_TupleT" , bound = tuple [Any , ...], covariant = True )
17
18
18
19
MAX_GET_RESULTS : int
19
20
REPR_OUTPUT_SIZE : int
20
21
21
- class BaseIterable (Generic [_Row ]):
22
+ class BaseIterable (Generic [_T ]):
22
23
queryset : QuerySet [Model ]
23
24
chunked_fetch : bool
24
25
chunk_size : int
25
26
def __init__ (self , queryset : QuerySet [Model ], chunked_fetch : bool = ..., chunk_size : int = ...) -> None : ...
26
- def __aiter__ (self ) -> AsyncIterator [_Row ]: ...
27
+ def __aiter__ (self ) -> AsyncIterator [_T ]: ...
27
28
28
- class ModelIterable (Generic [_T ], BaseIterable [_T ]):
29
- def __iter__ (self ) -> Iterator [_T ]: ...
29
+ class ModelIterable (Generic [_Model ], BaseIterable [_Model ]):
30
+ def __iter__ (self ) -> Iterator [_Model ]: ...
30
31
31
32
class RawModelIterable (BaseIterable [dict [str , Any ]]):
32
33
def __iter__ (self ) -> Iterator [dict [str , Any ]]: ...
@@ -40,11 +41,11 @@ class ValuesListIterable(BaseIterable[_TupleT]):
40
41
class NamedValuesListIterable (ValuesListIterable [NamedTuple ]):
41
42
def __iter__ (self ) -> Iterator [NamedTuple ]: ...
42
43
43
- class FlatValuesListIterable (BaseIterable [_Row ]):
44
- def __iter__ (self ) -> Iterator [_Row ]: ...
44
+ class FlatValuesListIterable (BaseIterable [_T ]):
45
+ def __iter__ (self ) -> Iterator [_T ]: ...
45
46
46
- class _QuerySet (Generic [_T , _Row ], Iterable [_Row ], Sized ):
47
- model : type [_T ]
47
+ class QuerySet (Generic [_Model , _Row ], Iterable [_Row ], Sized ):
48
+ model : type [_Model ]
48
49
query : Query
49
50
_iterable_class : type [BaseIterable ]
50
51
_result_cache : list [_Row ] | None
@@ -56,14 +57,14 @@ class _QuerySet(Generic[_T, _Row], Iterable[_Row], Sized):
56
57
hints : dict [str , Model ] | None = ...,
57
58
) -> None : ...
58
59
@classmethod
59
- def as_manager (cls ) -> Manager [_T ]: ...
60
+ def as_manager (cls ) -> Manager [_Model ]: ...
60
61
def __len__ (self ) -> int : ...
61
62
def __bool__ (self ) -> bool : ...
62
- def __class_getitem__ (cls : type [_QS ], item : type [_T ]) -> type [_QS ]: ...
63
+ def __class_getitem__ (cls : type [_QS ], item : type [_Model ]) -> type [_QS ]: ...
63
64
def __getstate__ (self ) -> dict [str , Any ]: ...
64
65
# Technically, the other QuerySet must be of the same type _T, but _T is covariant
65
- def __and__ (self , other : _QuerySet [ _T , _Row ]) -> Self : ...
66
- def __or__ (self , other : _QuerySet [ _T , _Row ]) -> Self : ...
66
+ def __and__ (self , other : QuerySet [ _Model , _Row ]) -> Self : ...
67
+ def __or__ (self , other : QuerySet [ _Model , _Row ]) -> Self : ...
67
68
# IMPORTANT: When updating any of the following methods' signatures, please ALSO modify
68
69
# the corresponding method in BaseManager.
69
70
def iterator (self , chunk_size : int | None = ...) -> Iterator [_Row ]: ...
@@ -72,44 +73,46 @@ class _QuerySet(Generic[_T, _Row], Iterable[_Row], Sized):
72
73
async def aaggregate (self , * args : Any , ** kwargs : Any ) -> dict [str , Any ]: ...
73
74
def get (self , * args : Any , ** kwargs : Any ) -> _Row : ...
74
75
async def aget (self , * args : Any , ** kwargs : Any ) -> _Row : ...
75
- def create (self , ** kwargs : Any ) -> _T : ...
76
- async def acreate (self , ** kwargs : Any ) -> _T : ...
76
+ def create (self , ** kwargs : Any ) -> _Model : ...
77
+ async def acreate (self , ** kwargs : Any ) -> _Model : ...
77
78
def bulk_create (
78
79
self ,
79
- objs : Iterable [_T ],
80
+ objs : Iterable [_Model ],
80
81
batch_size : int | None = ...,
81
82
ignore_conflicts : bool = ...,
82
83
update_conflicts : bool = ...,
83
84
update_fields : Collection [str ] | None = ...,
84
85
unique_fields : Collection [str ] | None = ...,
85
- ) -> list [_T ]: ...
86
+ ) -> list [_Model ]: ...
86
87
async def abulk_create (
87
88
self ,
88
- objs : Iterable [_T ],
89
+ objs : Iterable [_Model ],
89
90
batch_size : int | None = ...,
90
91
ignore_conflicts : bool = ...,
91
92
update_conflicts : bool = ...,
92
93
update_fields : Collection [str ] | None = ...,
93
94
unique_fields : Collection [str ] | None = ...,
94
- ) -> list [_T ]: ...
95
- def bulk_update (self , objs : Iterable [_T ], fields : Iterable [str ], batch_size : int | None = ...) -> int : ...
96
- async def abulk_update (self , objs : Iterable [_T ], fields : Iterable [str ], batch_size : int | None = ...) -> int : ...
97
- def get_or_create (self , defaults : MutableMapping [str , Any ] | None = ..., ** kwargs : Any ) -> tuple [_T , bool ]: ...
95
+ ) -> list [_Model ]: ...
96
+ def bulk_update (self , objs : Iterable [_Model ], fields : Iterable [str ], batch_size : int | None = ...) -> int : ...
97
+ async def abulk_update (
98
+ self , objs : Iterable [_Model ], fields : Iterable [str ], batch_size : int | None = ...
99
+ ) -> int : ...
100
+ def get_or_create (self , defaults : MutableMapping [str , Any ] | None = ..., ** kwargs : Any ) -> tuple [_Model , bool ]: ...
98
101
async def aget_or_create (
99
102
self , defaults : MutableMapping [str , Any ] | None = ..., ** kwargs : Any
100
- ) -> tuple [_T , bool ]: ...
103
+ ) -> tuple [_Model , bool ]: ...
101
104
def update_or_create (
102
105
self ,
103
106
defaults : MutableMapping [str , Any ] | None = ...,
104
107
create_defaults : MutableMapping [str , Any ] | None = ...,
105
108
** kwargs : Any ,
106
- ) -> tuple [_T , bool ]: ...
109
+ ) -> tuple [_Model , bool ]: ...
107
110
async def aupdate_or_create (
108
111
self ,
109
112
defaults : MutableMapping [str , Any ] | None = ...,
110
113
create_defaults : MutableMapping [str , Any ] | None = ...,
111
114
** kwargs : Any ,
112
- ) -> tuple [_T , bool ]: ...
115
+ ) -> tuple [_Model , bool ]: ...
113
116
def earliest (self , * fields : str | OrderBy ) -> _Row : ...
114
117
async def aearliest (self , * fields : str | OrderBy ) -> _Row : ...
115
118
def latest (self , * fields : str | OrderBy ) -> _Row : ...
@@ -118,8 +121,8 @@ class _QuerySet(Generic[_T, _Row], Iterable[_Row], Sized):
118
121
async def afirst (self ) -> _Row | None : ...
119
122
def last (self ) -> _Row | None : ...
120
123
async def alast (self ) -> _Row | None : ...
121
- def in_bulk (self , id_list : Iterable [Any ] | None = ..., * , field_name : str = ...) -> dict [Any , _T ]: ...
122
- async def ain_bulk (self , id_list : Iterable [Any ] | None = ..., * , field_name : str = ...) -> dict [Any , _T ]: ...
124
+ def in_bulk (self , id_list : Iterable [Any ] | None = ..., * , field_name : str = ...) -> dict [Any , _Model ]: ...
125
+ async def ain_bulk (self , id_list : Iterable [Any ] | None = ..., * , field_name : str = ...) -> dict [Any , _Model ]: ...
123
126
def delete (self ) -> tuple [int , dict [str , int ]]: ...
124
127
async def adelete (self ) -> tuple [int , dict [str , int ]]: ...
125
128
def update (self , ** kwargs : Any ) -> int : ...
@@ -138,13 +141,13 @@ class _QuerySet(Generic[_T, _Row], Iterable[_Row], Sized):
138
141
using : str | None = ...,
139
142
) -> RawQuerySet : ...
140
143
# The type of values may be overridden to be more specific in the mypy plugin, depending on the fields param
141
- def values (self , * fields : str | Combinable , ** expressions : Any ) -> _QuerySet [ _T , dict [str , Any ]]: ...
144
+ def values (self , * fields : str | Combinable , ** expressions : Any ) -> QuerySet [ _Model , dict [str , Any ]]: ...
142
145
# The type of values_list may be overridden to be more specific in the mypy plugin, depending on the fields param
143
- def values_list (self , * fields : str | Combinable , flat : bool = ..., named : bool = ...) -> _QuerySet [ _T , Any ]: ...
144
- def dates (self , field_name : str , kind : str , order : str = ...) -> _QuerySet [ _T , datetime .date ]: ...
146
+ def values_list (self , * fields : str | Combinable , flat : bool = ..., named : bool = ...) -> QuerySet [ _Model , Any ]: ...
147
+ def dates (self , field_name : str , kind : str , order : str = ...) -> QuerySet [ _Model , datetime .date ]: ...
145
148
def datetimes (
146
149
self , field_name : str , kind : str , order : str = ..., tzinfo : datetime .tzinfo | None = ...
147
- ) -> _QuerySet [ _T , datetime .datetime ]: ...
150
+ ) -> QuerySet [ _Model , datetime .datetime ]: ...
148
151
def none (self ) -> Self : ...
149
152
def all (self ) -> Self : ...
150
153
def filter (self , * args : Any , ** kwargs : Any ) -> Self : ...
@@ -173,7 +176,7 @@ class _QuerySet(Generic[_T, _Row], Iterable[_Row], Sized):
173
176
tables : Sequence [str ] | None = ...,
174
177
order_by : Sequence [str ] | None = ...,
175
178
select_params : Sequence [Any ] | None = ...,
176
- ) -> _QuerySet [Any , Any ]: ...
179
+ ) -> QuerySet [Any , Any ]: ...
177
180
def reverse (self ) -> Self : ...
178
181
def defer (self , * fields : Any ) -> Self : ...
179
182
def only (self , * fields : Any ) -> Self : ...
@@ -192,7 +195,7 @@ class _QuerySet(Generic[_T, _Row], Iterable[_Row], Sized):
192
195
def __getitem__ (self , s : slice ) -> Self : ...
193
196
def __reversed__ (self ) -> Iterator [_Row ]: ...
194
197
195
- class RawQuerySet (Iterable [_T ], Sized ):
198
+ class RawQuerySet (Iterable [_Model ], Sized ):
196
199
query : RawQuery
197
200
def __init__ (
198
201
self ,
@@ -205,28 +208,28 @@ class RawQuerySet(Iterable[_T], Sized):
205
208
hints : dict [str , Model ] | None = ...,
206
209
) -> None : ...
207
210
def __len__ (self ) -> int : ...
208
- def __iter__ (self ) -> Iterator [_T ]: ...
211
+ def __iter__ (self ) -> Iterator [_Model ]: ...
209
212
def __bool__ (self ) -> bool : ...
210
213
@overload
211
- def __getitem__ (self , k : int ) -> _T : ...
214
+ def __getitem__ (self , k : int ) -> _Model : ...
212
215
@overload
213
216
def __getitem__ (self , k : str ) -> Any : ...
214
217
@overload
215
- def __getitem__ (self , k : slice ) -> RawQuerySet [_T ]: ...
218
+ def __getitem__ (self , k : slice ) -> RawQuerySet [_Model ]: ...
216
219
@cached_property
217
220
def columns (self ) -> list [str ]: ...
218
221
@property
219
222
def db (self ) -> str : ...
220
- def iterator (self ) -> Iterator [_T ]: ...
223
+ def iterator (self ) -> Iterator [_Model ]: ...
221
224
@cached_property
222
225
def model_fields (self ) -> dict [str , str ]: ...
223
- def prefetch_related (self , * lookups : Any ) -> RawQuerySet [_T ]: ...
226
+ def prefetch_related (self , * lookups : Any ) -> RawQuerySet [_Model ]: ...
224
227
def resolve_model_init_order (self ) -> tuple [list [str ], list [int ], list [tuple [str , int ]]]: ...
225
- def using (self , alias : str | None ) -> RawQuerySet [_T ]: ...
226
-
227
- _QuerySetAny : TypeAlias = _QuerySet # noqa: PYI047
228
+ def using (self , alias : str | None ) -> RawQuerySet [_Model ]: ...
228
229
229
- QuerySet : TypeAlias = _QuerySet [_T , _T ]
230
+ # Deprecated aliases of QuerySet, for compatibility only.
231
+ _QuerySet : TypeAlias = QuerySet [_T , _Row ]
232
+ _QuerySetAny : TypeAlias = QuerySet # noqa: PYI047
230
233
231
234
class Prefetch :
232
235
prefetch_through : str
@@ -240,8 +243,8 @@ class Prefetch:
240
243
def get_current_to_attr (self , level : int ) -> tuple [str , str ]: ...
241
244
def get_current_queryset (self , level : int ) -> QuerySet | None : ...
242
245
243
- def prefetch_related_objects (model_instances : Iterable [_T ], * related_lookups : str | Prefetch ) -> None : ...
244
- async def aprefetch_related_objects (model_instances : Iterable [_T ], * related_lookups : str | Prefetch ) -> None : ...
246
+ def prefetch_related_objects (model_instances : Iterable [_Model ], * related_lookups : str | Prefetch ) -> None : ...
247
+ async def aprefetch_related_objects (model_instances : Iterable [_Model ], * related_lookups : str | Prefetch ) -> None : ...
245
248
def get_prefetcher (instance : Model , through_attr : str , to_attr : str ) -> tuple [Any , Any , bool , bool ]: ...
246
249
247
250
class InstanceCheckMeta (type ): ...
0 commit comments