@@ -296,14 +296,30 @@ def __init__(self, fields: Iterable[str] | None = None):
296
296
# finalize_class() will replace None; pretend it is never None.
297
297
self .fields = cast (Iterable [str ], fields )
298
298
299
+ @overload
300
+ def __call__ (
301
+ self ,
302
+ func : None = None ,
303
+ fields : Iterable [str ] | None = None
304
+ ) -> Callable [[Callable [..., T ]], Callable [..., T ]]:
305
+ ...
306
+
307
+ @overload
308
+ def __call__ (
309
+ self ,
310
+ func : Callable [..., T ],
311
+ fields : Iterable [str ] | None = None
312
+ ) -> Callable [..., T ]:
313
+ ...
314
+
299
315
def __call__ (
300
316
self ,
301
- func : Callable | None = None ,
317
+ func : Callable [..., T ] | None = None ,
302
318
fields : Iterable [str ] | None = None
303
- ) -> Any :
304
- def decorator (f : Callable ) -> Callable :
319
+ ) -> Callable [[ Callable [..., T ]], Callable [..., T ]] | Callable [..., T ] :
320
+ def decorator (f : Callable [..., T ] ) -> Callable [..., T ] :
305
321
@wraps (f )
306
- def inner (obj : models .Model , * args : object , ** kwargs : object ) -> object :
322
+ def inner (obj : models .Model , * args : object , ** kwargs : object ) -> T :
307
323
tracker = getattr (obj , self .attname )
308
324
field_list = tracker .fields if fields is None else fields
309
325
with tracker (* field_list ):
0 commit comments