@@ -56,7 +56,7 @@ class IncorrectLookupParameters(Exception): ...
5656FORMFIELD_FOR_DBFIELD_DEFAULTS : Any
5757csrf_protect_m : Any
5858
59- _FieldGroups : TypeAlias = Sequence [str | Sequence [str ]]
59+ _FieldGroups : TypeAlias = _ListOrTuple [str | _ListOrTuple [str ]]
6060
6161@type_check_only
6262class _OptionalFieldOpts (TypedDict , total = False ):
@@ -67,9 +67,6 @@ class _OptionalFieldOpts(TypedDict, total=False):
6767class _FieldOpts (_OptionalFieldOpts , total = True ):
6868 fields : _FieldGroups
6969
70- # Workaround for mypy issue, a Sequence type should be preferred here.
71- # https://github.com/python/mypy/issues/8921
72- # _FieldsetSpec = Sequence[Tuple[Optional[str], _FieldOpts]]
7370_FieldsetSpec : TypeAlias = _ListOrTuple [tuple [_StrOrPromise | None , _FieldOpts ]]
7471_ListFilterT : TypeAlias = (
7572 type [ListFilter ]
@@ -82,7 +79,8 @@ _ListFilterT: TypeAlias = (
8279# Generic type specifically for models, for use in BaseModelAdmin and subclasses
8380# https://github.com/typeddjango/django-stubs/issues/482
8481_ModelT = TypeVar ("_ModelT" , bound = Model )
85- _DisplayT : TypeAlias = _ListOrTuple [str | Callable [[_ModelT ], str | bool ]]
82+ _DisplayT : TypeAlias = str | Callable [[_ModelT ], str | bool ]
83+ _ListDisplayT : TypeAlias = _ListOrTuple [_DisplayT [_ModelT ]]
8684
8785# Options `form`, `list_display`, `list_display_links` and `actions` are not marked as `ClassVar` due to the
8886# limitations of the current type system: `ClassVar` cannot contain type variables.
@@ -125,12 +123,12 @@ class BaseModelAdmin(Generic[_ModelT]):
125123 def get_exclude (self , request : HttpRequest , obj : _ModelT | None = ...) -> _ListOrTuple [str ] | None : ...
126124 def get_fields (self , request : HttpRequest , obj : _ModelT | None = ...) -> _FieldGroups : ...
127125 def get_fieldsets (self , request : HttpRequest , obj : _ModelT | None = ...) -> _FieldsetSpec : ...
128- def get_inlines (self , request : HttpRequest , obj : _ModelT | None ) -> list [type [InlineModelAdmin ]]: ...
126+ def get_inlines (self , request : HttpRequest , obj : _ModelT | None ) -> _ListOrTuple [type [InlineModelAdmin ]]: ...
129127 def get_ordering (self , request : HttpRequest ) -> _ListOrTuple [str ]: ...
130128 def get_readonly_fields (self , request : HttpRequest , obj : _ModelT | None = ...) -> _ListOrTuple [str ]: ...
131129 def get_prepopulated_fields (self , request : HttpRequest , obj : _ModelT | None = ...) -> dict [str , Sequence [str ]]: ...
132130 def get_queryset (self , request : HttpRequest ) -> QuerySet [_ModelT ]: ...
133- def get_sortable_by (self , request : HttpRequest ) -> _DisplayT [_ModelT ]: ...
131+ def get_sortable_by (self , request : HttpRequest ) -> _ListDisplayT [_ModelT ]: ...
134132 @overload
135133 @deprecated ("None value for the request parameter will be removed in Django 6.0." )
136134 def lookup_allowed (self , lookup : str , value : str , request : None = None ) -> bool : ...
@@ -150,8 +148,8 @@ _ModelAdmin = TypeVar("_ModelAdmin", bound=ModelAdmin[Any])
150148_ActionCallable : TypeAlias = Callable [[_ModelAdmin , HttpRequest , QuerySet [_ModelT ]], HttpResponseBase | None ]
151149
152150class ModelAdmin (BaseModelAdmin [_ModelT ]):
153- list_display : _DisplayT [_ModelT ]
154- list_display_links : _DisplayT [_ModelT ] | None
151+ list_display : _ListDisplayT [_ModelT ]
152+ list_display_links : _ListDisplayT [_ModelT ] | None
155153 list_filter : ClassVar [_ListOrTuple [_ListFilterT ]]
156154 list_select_related : ClassVar [bool | _ListOrTuple [str ]]
157155 list_per_page : ClassVar [int ]
@@ -220,8 +218,10 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
220218 self , request : HttpRequest , default_choices : list [tuple [str , str ]] = ...
221219 ) -> list [tuple [str , str ]]: ...
222220 def get_action (self , action : Callable | str ) -> tuple [Callable [..., str ], str , str ] | None : ...
223- def get_list_display (self , request : HttpRequest ) -> _DisplayT [_ModelT ]: ...
224- def get_list_display_links (self , request : HttpRequest , list_display : _DisplayT [_ModelT ]) -> _DisplayT [_ModelT ]: ...
221+ def get_list_display (self , request : HttpRequest ) -> _ListDisplayT [_ModelT ]: ...
222+ def get_list_display_links (
223+ self , request : HttpRequest , list_display : _ListDisplayT [_ModelT ]
224+ ) -> _ListDisplayT [_ModelT ]: ...
225225 def get_list_filter (self , request : HttpRequest ) -> _ListOrTuple [_ListFilterT ]: ...
226226 def get_list_select_related (self , request : HttpRequest ) -> bool | _ListOrTuple [str ]: ...
227227 def get_search_fields (self , request : HttpRequest ) -> _ListOrTuple [str ]: ...
0 commit comments