1+ import datetime
12from typing import (
23 Any ,
34 Dict ,
@@ -13,6 +14,9 @@ from typing import (
1314 TypeVar ,
1415 Union ,
1516 overload ,
17+ Generic ,
18+ NamedTuple ,
19+ Collection ,
1620)
1721
1822from django .db .models .base import Model
@@ -46,7 +50,7 @@ class FlatValuesListIterable(BaseIterable):
4650
4751_T = TypeVar ("_T" , bound = models .Model , covariant = True )
4852
49- class QuerySet (Iterable [_T ], Sized ):
53+ class QuerySet (Generic [_T , _Row ], Collection [ _Row ], Sized ):
5054 query : Query
5155 def __init__ (
5256 self ,
@@ -58,32 +62,33 @@ class QuerySet(Iterable[_T], Sized):
5862 @classmethod
5963 def as_manager (cls ) -> Manager [Any ]: ...
6064 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 ]: ...
6271 def __bool__ (self ) -> bool : ...
6372 def __class_getitem__ (cls , item : Type [_T ]):
6473 pass
6574 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 ]: ...
7580 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 : ...
7782 def create (self , ** kwargs : Any ) -> _T : ...
7883 def bulk_create (self , objs : Iterable [Model ], batch_size : Optional [int ] = ...) -> List [_T ]: ...
7984 def get_or_create (self , defaults : Optional [MutableMapping [str , Any ]] = ..., ** kwargs : Any ) -> Tuple [_T , bool ]: ...
8085 def update_or_create (
8186 self , defaults : Optional [MutableMapping [str , Any ]] = ..., ** kwargs : Any
8287 ) -> 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 ]: ...
8792 def in_bulk (self , id_list : Iterable [Any ] = ..., * , field_name : str = ...) -> Dict [Any , _T ]: ...
8893 def delete (self ) -> Tuple [int , Dict [str , int ]]: ...
8994 def update (self , ** kwargs : Any ) -> int : ...
@@ -93,31 +98,38 @@ class QuerySet(Iterable[_T], Sized):
9398 def raw (
9499 self , raw_query : str , params : Any = ..., translations : Optional [Dict [str , str ]] = ..., using : None = ...
95100 ) -> 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 ]: ...
111123 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 ]: ...
121133 def extra (
122134 self ,
123135 select : Optional [Dict [str , Any ]] = ...,
@@ -126,11 +138,11 @@ class QuerySet(Iterable[_T], Sized):
126138 tables : Optional [List [str ]] = ...,
127139 order_by : Optional [Sequence [str ]] = ...,
128140 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 ]: ...
134146 @property
135147 def ordered (self ) -> bool : ...
136148 @property
@@ -159,7 +171,7 @@ class RawQuerySet(Iterable[_T], Sized):
159171 @overload
160172 def __getitem__ (self , k : str ) -> Any : ...
161173 @overload
162- def __getitem__ (self , k : slice ) -> QuerySet [_T ]: ...
174+ def __getitem__ (self , k : slice ) -> RawQuerySet [_T ]: ...
163175 @property
164176 def columns (self ) -> List [str ]: ...
165177 @property
0 commit comments