1
+ import datetime
1
2
from typing import (
2
3
Any ,
3
4
Dict ,
@@ -13,6 +14,9 @@ from typing import (
13
14
TypeVar ,
14
15
Union ,
15
16
overload ,
17
+ Generic ,
18
+ NamedTuple ,
19
+ Collection ,
16
20
)
17
21
18
22
from django .db .models .base import Model
@@ -46,7 +50,7 @@ class FlatValuesListIterable(BaseIterable):
46
50
47
51
_T = TypeVar ("_T" , bound = models .Model , covariant = True )
48
52
49
- class QuerySet (Iterable [_T ], Sized ):
53
+ class QuerySet (Generic [_T , _Row ], Collection [ _Row ], Sized ):
50
54
query : Query
51
55
def __init__ (
52
56
self ,
@@ -58,32 +62,33 @@ class QuerySet(Iterable[_T], Sized):
58
62
@classmethod
59
63
def as_manager (cls ) -> Manager [Any ]: ...
60
64
def __len__ (self ) -> int : ...
61
- def __iter__ (self ) -> Iterator [_T ]: ...
65
+ def __iter__ (self ) -> Iterator [_Row ]: ...
66
+ def __contains__ (self , x : object ) -> bool : ...
67
+ @overload
68
+ def __getitem__ (self , i : int ) -> _Row : ...
69
+ @overload
70
+ def __getitem__ (self , s : slice ) -> QuerySet [_T , _Row ]: ...
62
71
def __bool__ (self ) -> bool : ...
63
72
def __class_getitem__ (cls , item : Type [_T ]):
64
73
pass
65
74
def __getstate__ (self ) -> Dict [str , Any ]: ...
66
- @overload
67
- def __getitem__ (self , k : int ) -> _T : ...
68
- @overload
69
- def __getitem__ (self , k : str ) -> Any : ...
70
- @overload
71
- def __getitem__ (self , k : slice ) -> QuerySet [_T ]: ...
72
- def __and__ (self , other : QuerySet ) -> QuerySet : ...
73
- def __or__ (self , other : QuerySet ) -> QuerySet : ...
74
- def iterator (self , chunk_size : int = ...) -> Iterator [_T ]: ...
75
+ # __and__ and __or__ ignore the other QuerySet's _Row type parameter because they use the same row type as the self QuerySet.
76
+ # Technically, the other QuerySet must be of the same type _T, but _T is covariant
77
+ def __and__ (self , other : QuerySet [_T , Any ]) -> QuerySet [_T , _Row ]: ...
78
+ def __or__ (self , other : QuerySet [_T , Any ]) -> QuerySet [_T , _Row ]: ...
79
+ def iterator (self , chunk_size : int = ...) -> Iterator [_Row ]: ...
75
80
def aggregate (self , * args : Any , ** kwargs : Any ) -> Dict [str , Any ]: ...
76
- def get (self , * args : Any , ** kwargs : Any ) -> _T : ...
81
+ def get (self , * args : Any , ** kwargs : Any ) -> _Row : ...
77
82
def create (self , ** kwargs : Any ) -> _T : ...
78
83
def bulk_create (self , objs : Iterable [Model ], batch_size : Optional [int ] = ...) -> List [_T ]: ...
79
84
def get_or_create (self , defaults : Optional [MutableMapping [str , Any ]] = ..., ** kwargs : Any ) -> Tuple [_T , bool ]: ...
80
85
def update_or_create (
81
86
self , defaults : Optional [MutableMapping [str , Any ]] = ..., ** kwargs : Any
82
87
) -> Tuple [_T , bool ]: ...
83
- def earliest (self , * fields : Any , field_name : Optional [Any ] = ...) -> _T : ...
84
- def latest (self , * fields : Any , field_name : Optional [Any ] = ...) -> _T : ...
85
- def first (self ) -> Optional [_T ]: ...
86
- def last (self ) -> Optional [_T ]: ...
88
+ def earliest (self , * fields : Any , field_name : Optional [Any ] = ...) -> _Row : ...
89
+ def latest (self , * fields : Any , field_name : Optional [Any ] = ...) -> _Row : ...
90
+ def first (self ) -> Optional [_Row ]: ...
91
+ def last (self ) -> Optional [_Row ]: ...
87
92
def in_bulk (self , id_list : Iterable [Any ] = ..., * , field_name : str = ...) -> Dict [Any , _T ]: ...
88
93
def delete (self ) -> Tuple [int , Dict [str , int ]]: ...
89
94
def update (self , ** kwargs : Any ) -> int : ...
@@ -93,31 +98,38 @@ class QuerySet(Iterable[_T], Sized):
93
98
def raw (
94
99
self , raw_query : str , params : Any = ..., translations : Optional [Dict [str , str ]] = ..., using : None = ...
95
100
) -> RawQuerySet : ...
96
- def values (self , * fields : Union [str , Combinable ], ** expressions : Any ) -> QuerySet : ...
97
- def values_list (self , * fields : Union [str , Combinable ], flat : bool = ..., named : bool = ...) -> QuerySet : ...
98
- # @overload
99
- # def values_list(self, *fields: Union[str, Combinable], named: Literal[True]) -> NamedValuesListIterable: ...
100
- # @overload
101
- # def values_list(self, *fields: Union[str, Combinable], flat: Literal[True]) -> FlatValuesListIterable: ...
102
- # @overload
103
- # def values_list(self, *fields: Union[str, Combinable]) -> ValuesListIterable: ...
104
- def dates (self , field_name : str , kind : str , order : str = ...) -> QuerySet : ...
105
- def datetimes (self , field_name : str , kind : str , order : str = ..., tzinfo : None = ...) -> QuerySet : ...
106
- def none (self ) -> QuerySet [_T ]: ...
107
- def all (self ) -> QuerySet [_T ]: ...
108
- def filter (self , * args : Any , ** kwargs : Any ) -> QuerySet [_T ]: ...
109
- def exclude (self , * args : Any , ** kwargs : Any ) -> QuerySet [_T ]: ...
110
- def complex_filter (self , filter_obj : Any ) -> QuerySet [_T ]: ...
101
+ def values (self , * fields : Union [str , Combinable ], ** expressions : Any ) -> QuerySet [_T , Dict [str , Any ]]: ...
102
+ @overload
103
+ def values_list (
104
+ self , * fields : Union [str , Combinable ], flat : Literal [False ] = ..., named : Literal [True ]
105
+ ) -> QuerySet [_T , NamedTuple ]: ...
106
+ @overload
107
+ def values_list (
108
+ self , * fields : Union [str , Combinable ], flat : Literal [True ], named : Literal [False ] = ...
109
+ ) -> QuerySet [_T , Any ]: ...
110
+ @overload
111
+ def values_list (
112
+ self , * fields : Union [str , Combinable ], flat : Literal [False ] = ..., named : Literal [False ] = ...
113
+ ) -> QuerySet [_T , Tuple ]: ...
114
+ def dates (self , field_name : str , kind : str , order : str = ...) -> QuerySet [_T , datetime .date ]: ...
115
+ def datetimes (
116
+ self , field_name : str , kind : str , order : str = ..., tzinfo : None = ...
117
+ ) -> QuerySet [_T , datetime .datetime ]: ...
118
+ def none (self ) -> QuerySet [_T , _Row ]: ...
119
+ def all (self ) -> QuerySet [_T , _Row ]: ...
120
+ def filter (self , * args : Any , ** kwargs : Any ) -> QuerySet [_T , _Row ]: ...
121
+ def exclude (self , * args : Any , ** kwargs : Any ) -> QuerySet [_T , _Row ]: ...
122
+ def complex_filter (self , filter_obj : Any ) -> QuerySet [_T , _Row ]: ...
111
123
def count (self ) -> int : ...
112
- def union (self , * other_qs : Any , all : bool = ...) -> QuerySet [_T ]: ...
113
- def intersection (self , * other_qs : Any ) -> QuerySet [_T ]: ...
114
- def difference (self , * other_qs : Any ) -> QuerySet [_T ]: ...
115
- def select_for_update (self , nowait : bool = ..., skip_locked : bool = ..., of : Tuple = ...) -> QuerySet : ...
116
- def select_related (self , * fields : Any ) -> QuerySet [_T ]: ...
117
- def prefetch_related (self , * lookups : Any ) -> QuerySet [_T ]: ...
118
- def annotate (self , * args : Any , ** kwargs : Any ) -> QuerySet [_T ]: ...
119
- def order_by (self , * field_names : Any ) -> QuerySet [_T ]: ...
120
- def distinct (self , * field_names : Any ) -> QuerySet [_T ]: ...
124
+ def union (self , * other_qs : Any , all : bool = ...) -> QuerySet [_T , _Row ]: ...
125
+ def intersection (self , * other_qs : Any ) -> QuerySet [_T , _Row ]: ...
126
+ def difference (self , * other_qs : Any ) -> QuerySet [_T , _Row ]: ...
127
+ def select_for_update (self , nowait : bool = ..., skip_locked : bool = ..., of : Tuple = ...) -> QuerySet [ _T , _Row ] : ...
128
+ def select_related (self , * fields : Any ) -> QuerySet [_T , _Row ]: ...
129
+ def prefetch_related (self , * lookups : Any ) -> QuerySet [_T , _Row ]: ...
130
+ def annotate (self , * args : Any , ** kwargs : Any ) -> QuerySet [_T , _Row ]: ...
131
+ def order_by (self , * field_names : Any ) -> QuerySet [_T , _Row ]: ...
132
+ def distinct (self , * field_names : Any ) -> QuerySet [_T , _Row ]: ...
121
133
def extra (
122
134
self ,
123
135
select : Optional [Dict [str , Any ]] = ...,
@@ -126,11 +138,11 @@ class QuerySet(Iterable[_T], Sized):
126
138
tables : Optional [List [str ]] = ...,
127
139
order_by : Optional [Sequence [str ]] = ...,
128
140
select_params : Optional [Sequence [Any ]] = ...,
129
- ) -> QuerySet [_T ]: ...
130
- def reverse (self ) -> QuerySet [_T ]: ...
131
- def defer (self , * fields : Any ) -> QuerySet [_T ]: ...
132
- def only (self , * fields : Any ) -> QuerySet [_T ]: ...
133
- def using (self , alias : Optional [str ]) -> QuerySet [_T ]: ...
141
+ ) -> QuerySet [_T , _Row ]: ...
142
+ def reverse (self ) -> QuerySet [_T , _Row ]: ...
143
+ def defer (self , * fields : Any ) -> QuerySet [_T , _Row ]: ...
144
+ def only (self , * fields : Any ) -> QuerySet [_T , _Row ]: ...
145
+ def using (self , alias : Optional [str ]) -> QuerySet [_T , _Row ]: ...
134
146
@property
135
147
def ordered (self ) -> bool : ...
136
148
@property
@@ -159,7 +171,7 @@ class RawQuerySet(Iterable[_T], Sized):
159
171
@overload
160
172
def __getitem__ (self , k : str ) -> Any : ...
161
173
@overload
162
- def __getitem__ (self , k : slice ) -> QuerySet [_T ]: ...
174
+ def __getitem__ (self , k : slice ) -> RawQuerySet [_T ]: ...
163
175
@property
164
176
def columns (self ) -> List [str ]: ...
165
177
@property
0 commit comments