django-types 0.19.1__py3-none-any.whl → 0.21.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. django-stubs/contrib/admin/__init__.pyi +1 -0
  2. django-stubs/contrib/admin/actions.pyi +2 -2
  3. django-stubs/contrib/admin/decorators.pyi +4 -3
  4. django-stubs/contrib/admin/filters.pyi +5 -5
  5. django-stubs/contrib/admin/models.pyi +23 -11
  6. django-stubs/contrib/admin/options.pyi +67 -38
  7. django-stubs/contrib/admin/sites.pyi +11 -11
  8. django-stubs/contrib/admin/templatetags/base.pyi +1 -1
  9. django-stubs/contrib/admin/utils.pyi +2 -2
  10. django-stubs/contrib/admin/views/autocomplete.pyi +2 -2
  11. django-stubs/contrib/admin/views/main.pyi +8 -7
  12. django-stubs/contrib/admindocs/middleware.pyi +2 -2
  13. django-stubs/contrib/auth/__init__.pyi +14 -4
  14. django-stubs/contrib/auth/admin.pyi +2 -2
  15. django-stubs/contrib/auth/backends.pyi +22 -0
  16. django-stubs/contrib/auth/base_user.pyi +3 -3
  17. django-stubs/contrib/auth/forms.pyi +1 -1
  18. django-stubs/contrib/auth/middleware.pyi +1 -2
  19. django-stubs/contrib/auth/models.pyi +50 -26
  20. django-stubs/contrib/auth/views.pyi +1 -2
  21. django-stubs/contrib/contenttypes/fields.pyi +1 -1
  22. django-stubs/contrib/contenttypes/models.pyi +3 -1
  23. django-stubs/contrib/flatpages/middleware.pyi +2 -2
  24. django-stubs/contrib/flatpages/views.pyi +3 -3
  25. django-stubs/contrib/postgres/fields/array.pyi +6 -5
  26. django-stubs/contrib/postgres/fields/citext.pyi +13 -8
  27. django-stubs/contrib/postgres/fields/hstore.pyi +5 -4
  28. django-stubs/contrib/staticfiles/finders.pyi +1 -2
  29. django-stubs/contrib/staticfiles/views.pyi +2 -2
  30. django-stubs/contrib/syndication/views.pyi +4 -4
  31. django-stubs/core/cache/backends/base.pyi +9 -0
  32. django-stubs/core/exceptions.pyi +18 -11
  33. django-stubs/core/files/base.pyi +1 -1
  34. django-stubs/core/files/storage.pyi +2 -2
  35. django-stubs/core/mail/__init__.pyi +1 -1
  36. django-stubs/core/mail/backends/base.pyi +1 -0
  37. django-stubs/core/mail/message.pyi +6 -6
  38. django-stubs/core/serializers/json.pyi +1 -1
  39. django-stubs/core/servers/basehttp.pyi +2 -2
  40. django-stubs/db/backends/utils.pyi +1 -2
  41. django-stubs/db/migrations/recorder.pyi +1 -1
  42. django-stubs/db/models/base.pyi +9 -3
  43. django-stubs/db/models/constraints.pyi +1 -0
  44. django-stubs/db/models/enums.pyi +10 -19
  45. django-stubs/db/models/expressions.pyi +1 -1
  46. django-stubs/db/models/fields/__init__.pyi +227 -77
  47. django-stubs/db/models/fields/files.pyi +2 -2
  48. django-stubs/db/models/fields/json.pyi +10 -6
  49. django-stubs/db/models/fields/related.pyi +42 -20
  50. django-stubs/db/models/fields/related_descriptors.pyi +3 -3
  51. django-stubs/db/models/functions/__init__.pyi +2 -0
  52. django-stubs/db/models/functions/comparison.pyi +8 -0
  53. django-stubs/db/models/manager.pyi +11 -6
  54. django-stubs/db/models/query.pyi +4 -1
  55. django-stubs/db/models/query_utils.pyi +1 -0
  56. django-stubs/db/transaction.pyi +7 -1
  57. django-stubs/forms/boundfield.pyi +3 -1
  58. django-stubs/forms/forms.pyi +28 -35
  59. django-stubs/forms/formsets.pyi +98 -63
  60. django-stubs/forms/models.pyi +22 -17
  61. django-stubs/forms/renderers.pyi +26 -13
  62. django-stubs/forms/utils.pyi +38 -11
  63. django-stubs/http/cookie.pyi +3 -1
  64. django-stubs/http/request.pyi +43 -16
  65. django-stubs/http/response.pyi +38 -30
  66. django-stubs/shortcuts.pyi +1 -2
  67. django-stubs/template/backends/base.pyi +14 -5
  68. django-stubs/template/backends/django.pyi +24 -3
  69. django-stubs/template/backends/dummy.pyi +7 -6
  70. django-stubs/template/backends/jinja2.pyi +20 -2
  71. django-stubs/template/backends/utils.pyi +3 -3
  72. django-stubs/template/base.pyi +2 -2
  73. django-stubs/template/context.pyi +2 -2
  74. django-stubs/template/context_processors.pyi +1 -2
  75. django-stubs/template/library.pyi +79 -15
  76. django-stubs/template/loader.pyi +5 -3
  77. django-stubs/template/response.pyi +3 -3
  78. django-stubs/template/utils.pyi +6 -4
  79. django-stubs/test/client.pyi +176 -20
  80. django-stubs/test/testcases.pyi +4 -4
  81. django-stubs/test/utils.pyi +41 -55
  82. django-stubs/urls/base.pyi +18 -2
  83. django-stubs/urls/conf.pyi +7 -0
  84. django-stubs/utils/cache.pyi +4 -4
  85. django-stubs/utils/datastructures.pyi +5 -5
  86. django-stubs/utils/deconstruct.pyi +10 -2
  87. django-stubs/utils/log.pyi +1 -1
  88. django-stubs/utils/six.pyi +1 -1
  89. django-stubs/utils/translation/__init__.pyi +5 -3
  90. django-stubs/utils/translation/trans_real.pyi +2 -2
  91. django-stubs/views/decorators/csrf.pyi +1 -1
  92. django-stubs/views/generic/edit.pyi +1 -2
  93. {django_types-0.19.1.dist-info → django_types-0.21.0.dist-info}/METADATA +12 -8
  94. {django_types-0.19.1.dist-info → django_types-0.21.0.dist-info}/RECORD +96 -96
  95. {django_types-0.19.1.dist-info → django_types-0.21.0.dist-info}/WHEEL +1 -1
  96. {django_types-0.19.1.dist-info → django_types-0.21.0.dist-info}/LICENSE.txt +0 -0
@@ -6,6 +6,7 @@ from .filters import AllValuesFieldListFilter as AllValuesFieldListFilter
6
6
  from .filters import BooleanFieldListFilter as BooleanFieldListFilter
7
7
  from .filters import ChoicesFieldListFilter as ChoicesFieldListFilter
8
8
  from .filters import DateFieldListFilter as DateFieldListFilter
9
+ from .filters import EmptyFieldListFilter as EmptyFieldListFilter
9
10
  from .filters import FieldListFilter as FieldListFilter
10
11
  from .filters import ListFilter as ListFilter
11
12
  from .filters import RelatedFieldListFilter as RelatedFieldListFilter
@@ -1,10 +1,10 @@
1
1
  from typing import Any
2
2
 
3
3
  from django.contrib.admin.options import ModelAdmin
4
- from django.core.handlers.wsgi import WSGIRequest
5
4
  from django.db.models.query import QuerySet
5
+ from django.http.request import HttpRequest
6
6
  from django.template.response import TemplateResponse
7
7
 
8
8
  def delete_selected(
9
- modeladmin: ModelAdmin[Any], request: WSGIRequest, queryset: QuerySet[Any]
9
+ modeladmin: ModelAdmin[Any], request: HttpRequest, queryset: QuerySet[Any]
10
10
  ) -> TemplateResponse | None: ...
@@ -8,6 +8,7 @@ from django.db.models.expressions import BaseExpression
8
8
  from django.http import HttpRequest, HttpResponse
9
9
 
10
10
  _M = TypeVar("_M", bound=Model)
11
+ _T = TypeVar("_T", bound=object)
11
12
 
12
13
  def action(
13
14
  function: (
@@ -17,7 +18,7 @@ def action(
17
18
  *,
18
19
  permissions: Sequence[str] | None = ...,
19
20
  description: str | None = ...,
20
- ) -> Callable[..., Any]: ...
21
+ ) -> Callable[[_T], _T]: ...
21
22
  def display(
22
23
  function: Callable[[_M], Any] | None = ...,
23
24
  *,
@@ -25,5 +26,5 @@ def display(
25
26
  ordering: str | Combinable | BaseExpression | None = ...,
26
27
  description: str | None = ...,
27
28
  empty_value: str | None = ...,
28
- ) -> Callable[..., Any]: ...
29
- def register(*models: type[Model], site: Any | None = ...) -> Callable[..., Any]: ...
29
+ ) -> Callable[[_T], _T]: ...
30
+ def register(*models: type[Model], site: Any | None = ...) -> Callable[[_T], _T]: ...
@@ -2,11 +2,11 @@ from collections.abc import Callable, Iterator
2
2
  from typing import Any
3
3
 
4
4
  from django.contrib.admin.options import ModelAdmin
5
- from django.core.handlers.wsgi import WSGIRequest
6
5
  from django.db.models.base import Model
7
6
  from django.db.models.fields import Field
8
7
  from django.db.models.fields.related import RelatedField
9
8
  from django.db.models.query import QuerySet
9
+ from django.http.request import HttpRequest
10
10
 
11
11
  class ListFilter:
12
12
  title: Any = ...
@@ -14,7 +14,7 @@ class ListFilter:
14
14
  used_parameters: Any = ...
15
15
  def __init__(
16
16
  self,
17
- request: WSGIRequest,
17
+ request: HttpRequest,
18
18
  params: dict[str, str],
19
19
  model: type[Model],
20
20
  model_admin: ModelAdmin[Any],
@@ -39,7 +39,7 @@ class FieldListFilter(ListFilter):
39
39
  def __init__(
40
40
  self,
41
41
  field: Field[Any, Any],
42
- request: WSGIRequest,
42
+ request: HttpRequest,
43
43
  params: dict[str, str],
44
44
  model: type[Model],
45
45
  model_admin: ModelAdmin[Any],
@@ -56,7 +56,7 @@ class FieldListFilter(ListFilter):
56
56
  def create(
57
57
  cls,
58
58
  field: Field[Any, Any],
59
- request: WSGIRequest,
59
+ request: HttpRequest,
60
60
  params: dict[str, str],
61
61
  model: type[Model],
62
62
  model_admin: ModelAdmin[Any],
@@ -78,7 +78,7 @@ class RelatedFieldListFilter(FieldListFilter):
78
78
  def field_choices(
79
79
  self,
80
80
  field: RelatedField[Any, Any],
81
- request: WSGIRequest,
81
+ request: HttpRequest,
82
82
  model_admin: ModelAdmin[Any],
83
83
  ) -> list[tuple[str, str]]: ...
84
84
 
@@ -1,10 +1,11 @@
1
- import datetime as dt
1
+ from collections.abc import Iterable
2
2
  from typing import Any, ClassVar, TypeVar
3
3
  from typing_extensions import Self
4
- from uuid import UUID
5
4
 
5
+ from django.contrib.auth.models import User
6
6
  from django.contrib.contenttypes.models import ContentType
7
7
  from django.db import models
8
+ from django.utils import timezone as timezone
8
9
 
9
10
  ADDITION: int
10
11
  CHANGE: int
@@ -14,26 +15,37 @@ ACTION_FLAG_CHOICES: list[tuple[int, str]]
14
15
  _LogEntryT = TypeVar("_LogEntryT", bound=LogEntry)
15
16
 
16
17
  class LogEntryManager(models.Manager[_LogEntryT]):
18
+ use_in_migrations: bool
19
+ # Deprecated in favor of log_actions
17
20
  def log_action(
18
21
  self,
19
22
  user_id: int,
20
23
  content_type_id: int,
21
- object_id: int | str | UUID,
24
+ object_id: Any,
22
25
  object_repr: str,
23
26
  action_flag: int,
24
27
  change_message: str | list[Any] = ...,
25
28
  ) -> _LogEntryT: ...
29
+ def log_actions(
30
+ self,
31
+ user_id: int,
32
+ queryset: Iterable[models.Model],
33
+ action_flag: int,
34
+ change_message: str | list[Any] = ...,
35
+ *,
36
+ single_object: bool = ...,
37
+ ) -> _LogEntryT | list[_LogEntryT]: ...
26
38
 
27
39
  class LogEntry(models.Model):
28
- objects: ClassVar[LogEntryManager[Self]] # type: ignore[assignment]
40
+ action_time = models.DateTimeField()
41
+ user = models.ForeignKey[User]
42
+ content_type = models.ForeignKey[ContentType]
43
+ object_id = models.TextField(blank=True, null=True)
44
+ object_repr = models.CharField()
45
+ action_flag = models.PositiveSmallIntegerField()
46
+ change_message = models.TextField(blank=True)
29
47
 
30
- action_time: models.DateTimeField[dt.datetime]
31
- user: models.ForeignKey[Any]
32
- content_type: models.ForeignKey[ContentType | None]
33
- object_id: models.TextField[str | None]
34
- object_repr: models.CharField[str]
35
- action_flag: models.PositiveSmallIntegerField[int]
36
- change_message: models.TextField[str]
48
+ objects: ClassVar[LogEntryManager[Self]] # type: ignore[assignment]
37
49
 
38
50
  def is_addition(self) -> bool: ...
39
51
  def is_change(self) -> bool: ...
@@ -1,9 +1,10 @@
1
1
  from collections import OrderedDict
2
- from collections.abc import Callable, Iterator, Mapping, Sequence
3
- from typing import Any, Generic, TypeVar
4
- from typing_extensions import Literal, TypedDict
2
+ from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence
3
+ from typing import Any, Generic, Literal, TypeVar
4
+ from typing_extensions import TypedDict
5
5
 
6
6
  from django.contrib.admin.filters import ListFilter
7
+ from django.contrib.admin.helpers import ActionForm
7
8
  from django.contrib.admin.models import LogEntry
8
9
  from django.contrib.admin.sites import AdminSite
9
10
  from django.contrib.admin.views.main import ChangeList
@@ -16,11 +17,14 @@ from django.db.models.fields import Field
16
17
  from django.db.models.fields.related import ForeignKey, ManyToManyField, RelatedField
17
18
  from django.db.models.options import Options
18
19
  from django.db.models.query import QuerySet
20
+ from django.forms.fields import Field as FormField
19
21
  from django.forms.fields import TypedChoiceField
20
22
  from django.forms.forms import BaseForm
21
23
  from django.forms.models import (
22
24
  BaseInlineFormSet,
25
+ BaseModelFormSet,
23
26
  ModelChoiceField,
27
+ ModelForm,
24
28
  ModelMultipleChoiceField,
25
29
  )
26
30
  from django.forms.widgets import Media
@@ -81,15 +85,15 @@ class BaseModelAdmin(Generic[_ModelT]):
81
85
  prepopulated_fields: Mapping[str, Sequence[str]] = ...
82
86
  formfield_overrides: Mapping[type[Field[Any, Any]], Mapping[str, Any]] = ...
83
87
  readonly_fields: Sequence[str | Callable[[_ModelT], Any]] = ...
84
- ordering: Sequence[str] = ...
85
- sortable_by: Sequence[str] = ...
88
+ ordering: Sequence[str] | None = ...
89
+ sortable_by: Sequence[str] | None = ...
86
90
  view_on_site: bool = ...
87
91
  show_full_result_count: bool = ...
88
92
  checks_class: Any = ...
89
93
  def check(self, **kwargs: Any) -> list[CheckMessage]: ...
90
94
  def formfield_for_dbfield(
91
95
  self, db_field: Field[Any, Any], request: HttpRequest | None, **kwargs: Any
92
- ) -> Field[Any, Any] | None: ...
96
+ ) -> FormField | None: ...
93
97
  def formfield_for_choice_field(
94
98
  self, db_field: Field[Any, Any], request: HttpRequest | None, **kwargs: Any
95
99
  ) -> TypedChoiceField: ...
@@ -105,10 +109,12 @@ class BaseModelAdmin(Generic[_ModelT]):
105
109
  request: HttpRequest | None,
106
110
  **kwargs: Any
107
111
  ) -> ModelMultipleChoiceField: ...
108
- def get_autocomplete_fields(self, request: HttpRequest) -> tuple[Any, ...]: ...
112
+ def get_autocomplete_fields(self, request: HttpRequest) -> Sequence[str]: ...
109
113
  def get_view_on_site_url(self, obj: _ModelT | None = ...) -> str | None: ...
110
114
  def get_empty_value_display(self) -> SafeText: ...
111
- def get_exclude(self, request: HttpRequest, obj: _ModelT | None = ...) -> Any: ...
115
+ def get_exclude(
116
+ self, request: HttpRequest, obj: _ModelT | None = ...
117
+ ) -> Sequence[str]: ...
112
118
  def get_fields(
113
119
  self, request: HttpRequest, obj: _ModelT | None = ...
114
120
  ) -> Sequence[Callable[..., Any] | str]: ...
@@ -122,10 +128,13 @@ class BaseModelAdmin(Generic[_ModelT]):
122
128
  def get_prepopulated_fields(
123
129
  self, request: HttpRequest, obj: _ModelT | None = ...
124
130
  ) -> dict[str, tuple[str]]: ...
125
- def get_queryset(self, request: HttpRequest) -> QuerySet[Any]: ...
131
+ def get_queryset(self, request: HttpRequest) -> QuerySet[_ModelT]: ...
126
132
  def get_sortable_by(
127
133
  self, request: HttpRequest
128
134
  ) -> list[Callable[..., Any]] | list[str] | tuple[Any, ...]: ...
135
+ def get_inlines(
136
+ self, request: HttpRequest, obj: _ModelT | None
137
+ ) -> Iterable[type[InlineModelAdmin[Any]]]: ...
129
138
  def lookup_allowed(self, lookup: str, value: str) -> bool: ...
130
139
  def to_field_allowed(self, request: HttpRequest, to_field: str) -> bool: ...
131
140
  def has_add_permission(self, request: HttpRequest) -> bool: ...
@@ -167,12 +176,12 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
167
176
  Callable[[ModelAdmin[Any], HttpRequest, QuerySet[Any]], HttpResponse | None]
168
177
  | str
169
178
  ] | None = ...
170
- action_form: Any = ...
179
+ action_form: type[ActionForm] = ...
171
180
  actions_on_top: bool = ...
172
181
  actions_on_bottom: bool = ...
173
182
  actions_selection_counter: bool = ...
174
183
  model: type[_ModelT] = ...
175
- opts: Options[Any] = ...
184
+ opts: Options[_ModelT] = ...
176
185
  admin_site: AdminSite = ...
177
186
  def __init__(self, model: type[_ModelT], admin_site: AdminSite | None) -> None: ...
178
187
  def get_inline_instances(
@@ -185,8 +194,12 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
185
194
  def media(self) -> Media: ...
186
195
  def get_model_perms(self, request: HttpRequest) -> dict[str, bool]: ...
187
196
  def get_form(
188
- self, request: Any, obj: _ModelT | None = ..., change: bool = ..., **kwargs: Any
189
- ) -> Any: ...
197
+ self,
198
+ request: HttpRequest,
199
+ obj: _ModelT | None = ...,
200
+ change: bool = ...,
201
+ **kwargs: Any
202
+ ) -> type[ModelForm]: ...
190
203
  def get_changelist(
191
204
  self, request: HttpRequest, **kwargs: Any
192
205
  ) -> type[ChangeList]: ...
@@ -194,15 +207,19 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
194
207
  def get_object(
195
208
  self, request: HttpRequest, object_id: str, from_field: None = ...
196
209
  ) -> _ModelT | None: ...
197
- def get_changelist_form(self, request: Any, **kwargs: Any) -> Any: ...
198
- def get_changelist_formset(self, request: Any, **kwargs: Any) -> Any: ...
210
+ def get_changelist_form(
211
+ self, request: HttpRequest, **kwargs: Any
212
+ ) -> type[ModelForm]: ...
213
+ def get_changelist_formset(
214
+ self, request: HttpRequest, **kwargs: Any
215
+ ) -> type[BaseModelFormSet]: ...
199
216
  def get_formsets_with_inlines(
200
217
  self, request: HttpRequest, obj: _ModelT | None = ...
201
218
  ) -> Iterator[Any]: ...
202
219
  def get_paginator(
203
220
  self,
204
221
  request: HttpRequest,
205
- queryset: QuerySet[Any],
222
+ queryset: QuerySet[_ModelT],
206
223
  per_page: int,
207
224
  orphans: int = ...,
208
225
  allow_empty_first_page: bool = ...,
@@ -235,12 +252,6 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
235
252
  self, request: HttpRequest, queryset: QuerySet[Any], search_term: str
236
253
  ) -> tuple[QuerySet[Any], bool]: ...
237
254
  def get_preserved_filters(self, request: HttpRequest) -> str: ...
238
- def _get_edited_object_pks(
239
- self, request: HttpRequest, prefix: str
240
- ) -> list[str]: ...
241
- def _get_list_editable_queryset(
242
- self, request: HttpRequest, prefix: str
243
- ) -> QuerySet[Any]: ...
244
255
  def construct_change_message(
245
256
  self,
246
257
  request: HttpRequest,
@@ -256,29 +267,39 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
256
267
  extra_tags: str = ...,
257
268
  fail_silently: bool = ...,
258
269
  ) -> None: ...
259
- def save_form(self, request: Any, form: Any, change: Any) -> Any: ...
270
+ def save_form(
271
+ self, request: HttpRequest, form: ModelForm, change: bool
272
+ ) -> _ModelT: ...
260
273
  def save_model(
261
- self, request: Any, obj: _ModelT, form: Any, change: Any
274
+ self, request: HttpRequest, obj: _ModelT, form: ModelForm, change: bool
262
275
  ) -> None: ...
263
276
  def delete_model(self, request: HttpRequest, obj: _ModelT) -> None: ...
264
277
  def delete_queryset(
265
- self, request: HttpRequest, queryset: QuerySet[Any]
278
+ self, request: HttpRequest, queryset: QuerySet[_ModelT]
266
279
  ) -> None: ...
267
280
  def save_formset(
268
- self, request: Any, form: Any, formset: Any, change: Any
281
+ self,
282
+ request: HttpRequest,
283
+ form: ModelForm,
284
+ formset: BaseModelFormSet,
285
+ change: bool,
269
286
  ) -> None: ...
270
287
  def save_related(
271
- self, request: Any, form: Any, formsets: Any, change: Any
288
+ self,
289
+ request: HttpRequest,
290
+ form: ModelForm,
291
+ formsets: BaseModelFormSet,
292
+ change: bool,
272
293
  ) -> None: ...
273
294
  def render_change_form(
274
295
  self,
275
- request: Any,
276
- context: Any,
296
+ request: HttpRequest,
297
+ context: Mapping[str, Any],
277
298
  add: bool = ...,
278
299
  change: bool = ...,
279
300
  form_url: str = ...,
280
301
  obj: _ModelT | None = ...,
281
- ) -> Any: ...
302
+ ) -> TemplateResponse: ...
282
303
  def response_add(
283
304
  self, request: HttpRequest, obj: _ModelT, post_url_continue: str | None = ...
284
305
  ) -> HttpResponse: ...
@@ -290,12 +311,14 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
290
311
  self, request: HttpRequest, obj: _ModelT
291
312
  ) -> HttpResponseRedirect: ...
292
313
  def response_action(
293
- self, request: HttpRequest, queryset: QuerySet[Any]
314
+ self, request: HttpRequest, queryset: QuerySet[_ModelT]
294
315
  ) -> HttpResponseBase | None: ...
295
316
  def response_delete(
296
317
  self, request: HttpRequest, obj_display: str, obj_id: int
297
318
  ) -> HttpResponse: ...
298
- def render_delete_form(self, request: Any, context: Any) -> Any: ...
319
+ def render_delete_form(
320
+ self, request: HttpRequest, context: Mapping[str, Any]
321
+ ) -> TemplateResponse: ...
299
322
  def get_inline_formsets(
300
323
  self,
301
324
  request: HttpRequest,
@@ -310,7 +333,7 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
310
333
  object_id: str | None = ...,
311
334
  form_url: str = ...,
312
335
  extra_context: dict[str, bool] | None = ...,
313
- ) -> Any: ...
336
+ ) -> TemplateResponse: ...
314
337
  def autocomplete_view(self, request: HttpRequest) -> JsonResponse: ...
315
338
  def add_view(
316
339
  self, request: HttpRequest, form_url: str = ..., extra_context: None = ...
@@ -329,10 +352,16 @@ class ModelAdmin(BaseModelAdmin[_ModelT]):
329
352
  self, objs: QuerySet[Any], request: HttpRequest
330
353
  ) -> tuple[list[Any], dict[Any, Any], set[Any], list[Any]]: ...
331
354
  def delete_view(
332
- self, request: HttpRequest, object_id: str, extra_context: None = ...
333
- ) -> Any: ...
355
+ self,
356
+ request: HttpRequest,
357
+ object_id: str,
358
+ extra_context: dict[str, str] | None = ...,
359
+ ) -> HttpResponse: ...
334
360
  def history_view(
335
- self, request: HttpRequest, object_id: str, extra_context: None = ...
361
+ self,
362
+ request: HttpRequest,
363
+ object_id: str,
364
+ extra_context: dict[str, str] | None = ...,
336
365
  ) -> HttpResponse: ...
337
366
  def get_formset_kwargs(
338
367
  self,
@@ -374,8 +403,8 @@ class InlineModelAdmin(BaseModelAdmin[_ModelT]):
374
403
  self, request: HttpRequest, obj: _ModelT | None = ..., **kwargs: Any
375
404
  ) -> int | None: ...
376
405
  def get_formset(
377
- self, request: Any, obj: _ModelT | None = ..., **kwargs: Any
378
- ) -> Any: ...
406
+ self, request: HttpRequest, obj: _ModelT | None = ..., **kwargs: Any
407
+ ) -> type[BaseInlineFormSet]: ...
379
408
 
380
409
  class StackedInline(InlineModelAdmin[_ModelT]): ...
381
410
  class TabularInline(InlineModelAdmin[_ModelT]): ...
@@ -3,8 +3,8 @@ from typing import Any
3
3
 
4
4
  from django.apps.config import AppConfig
5
5
  from django.contrib.admin.options import ModelAdmin
6
- from django.core.handlers.wsgi import WSGIRequest
7
6
  from django.db.models.base import Model
7
+ from django.http.request import HttpRequest
8
8
  from django.http.response import HttpResponse
9
9
  from django.template.response import TemplateResponse
10
10
  from django.urls.resolvers import URLResolver
@@ -53,7 +53,7 @@ class AdminSite:
53
53
  def empty_value_display(self) -> Any: ...
54
54
  @empty_value_display.setter
55
55
  def empty_value_display(self, empty_value_display: Any) -> None: ...
56
- def has_permission(self, request: WSGIRequest) -> bool: ...
56
+ def has_permission(self, request: HttpRequest) -> bool: ...
57
57
  def admin_view(
58
58
  self, view: Callable[..., Any], cacheable: bool = ...
59
59
  ) -> Callable[..., Any]: ...
@@ -62,30 +62,30 @@ class AdminSite:
62
62
  def urls(self) -> tuple[list[URLResolver], str, str]: ...
63
63
  def each_context(self, request: Any) -> Any: ...
64
64
  def password_change(
65
- self, request: WSGIRequest, extra_context: dict[str, Any] | None = ...
65
+ self, request: HttpRequest, extra_context: dict[str, Any] | None = ...
66
66
  ) -> TemplateResponse: ...
67
67
  def password_change_done(
68
- self, request: WSGIRequest, extra_context: dict[str, Any] | None = ...
68
+ self, request: HttpRequest, extra_context: dict[str, Any] | None = ...
69
69
  ) -> TemplateResponse: ...
70
70
  def i18n_javascript(
71
- self, request: WSGIRequest, extra_context: dict[Any, Any] | None = ...
71
+ self, request: HttpRequest, extra_context: dict[Any, Any] | None = ...
72
72
  ) -> HttpResponse: ...
73
73
  def logout(
74
- self, request: WSGIRequest, extra_context: dict[str, Any] | None = ...
74
+ self, request: HttpRequest, extra_context: dict[str, Any] | None = ...
75
75
  ) -> TemplateResponse: ...
76
76
  def login(
77
- self, request: WSGIRequest, extra_context: dict[str, Any] | None = ...
77
+ self, request: HttpRequest, extra_context: dict[str, Any] | None = ...
78
78
  ) -> HttpResponse: ...
79
79
  def _build_app_dict(
80
- self, request: WSGIRequest, label: str | None = ...
80
+ self, request: HttpRequest, label: str | None = ...
81
81
  ) -> dict[str, Any]: ...
82
- def get_app_list(self, request: WSGIRequest) -> list[Any]: ...
82
+ def get_app_list(self, request: HttpRequest) -> list[Any]: ...
83
83
  def index(
84
- self, request: WSGIRequest, extra_context: dict[str, Any] | None = ...
84
+ self, request: HttpRequest, extra_context: dict[str, Any] | None = ...
85
85
  ) -> TemplateResponse: ...
86
86
  def app_index(
87
87
  self,
88
- request: WSGIRequest,
88
+ request: HttpRequest,
89
89
  app_label: str,
90
90
  extra_context: dict[str, Any] | None = ...,
91
91
  ) -> TemplateResponse: ...
@@ -10,7 +10,7 @@ class InclusionAdminNode(InclusionNode):
10
10
  args: list[Any]
11
11
  func: Callable[..., Any]
12
12
  kwargs: dict[Any, Any]
13
- takes_context: bool
13
+ takes_context: bool # pyright: ignore[reportIncompatibleVariableOverride]
14
14
  template_name: str = ...
15
15
  def __init__(
16
16
  self,
@@ -7,7 +7,6 @@ from uuid import UUID
7
7
  from django.contrib.admin.options import BaseModelAdmin
8
8
  from django.contrib.admin.sites import AdminSite
9
9
  from django.contrib.auth.forms import AdminPasswordChangeForm
10
- from django.core.handlers.wsgi import WSGIRequest
11
10
  from django.db.models.base import Model
12
11
  from django.db.models.deletion import Collector
13
12
  from django.db.models.fields import Field, reverse_related
@@ -15,6 +14,7 @@ from django.db.models.fields.reverse_related import ManyToOneRel
15
14
  from django.db.models.options import Options
16
15
  from django.db.models.query import QuerySet
17
16
  from django.forms.forms import BaseForm
17
+ from django.http.request import HttpRequest
18
18
 
19
19
  class FieldIsAForeignKeyColumnName(Exception): ...
20
20
 
@@ -25,7 +25,7 @@ def unquote(s: str) -> str: ...
25
25
  def flatten(fields: Any) -> list[Callable[..., Any] | str]: ...
26
26
  def flatten_fieldsets(fieldsets: Any) -> list[Callable[..., Any] | str]: ...
27
27
  def get_deleted_objects(
28
- objs: Sequence[Model | None], request: WSGIRequest, admin_site: AdminSite
28
+ objs: Sequence[Model | None], request: HttpRequest, admin_site: AdminSite
29
29
  ) -> tuple[list[Any], dict[Any, Any], set[Any], list[Any]]: ...
30
30
 
31
31
  class NestedObjects(Collector):
@@ -1,10 +1,10 @@
1
1
  from typing import Any
2
2
 
3
3
  from django.contrib.admin.options import ModelAdmin
4
- from django.core.handlers.wsgi import WSGIRequest
4
+ from django.http.request import HttpRequest
5
5
  from django.views.generic.list import BaseListView
6
6
 
7
7
  class AutocompleteJsonView(BaseListView):
8
8
  model_admin: ModelAdmin[Any] = ...
9
9
  term: Any = ...
10
- def has_perm(self, request: WSGIRequest, obj: None = ...) -> bool: ...
10
+ def has_perm(self, request: HttpRequest, obj: None = ...) -> bool: ...
@@ -6,12 +6,13 @@ from django.contrib.admin.filters import ListFilter, SimpleListFilter
6
6
  from django.contrib.admin.options import IS_POPUP_VAR as IS_POPUP_VAR # noqa: F401
7
7
  from django.contrib.admin.options import TO_FIELD_VAR as TO_FIELD_VAR
8
8
  from django.contrib.admin.options import ModelAdmin
9
- from django.core.handlers.wsgi import WSGIRequest
10
9
  from django.db.models.base import Model
11
10
  from django.db.models.expressions import Combinable, CombinedExpression, OrderBy
12
11
  from django.db.models.options import Options
13
12
  from django.db.models.query import QuerySet
14
13
  from django.forms.formsets import BaseFormSet
14
+ from django.forms.models import ModelForm
15
+ from django.http.request import HttpRequest
15
16
 
16
17
  ALL_VAR: str
17
18
  ORDER_VAR: str
@@ -47,10 +48,10 @@ class ChangeList:
47
48
  queryset: Any = ...
48
49
  title: Any = ...
49
50
  pk_attname: Any = ...
50
- formset: BaseFormSet | None
51
+ formset: BaseFormSet[ModelForm] | None
51
52
  def __init__(
52
53
  self,
53
- request: WSGIRequest,
54
+ request: HttpRequest,
54
55
  model: type[Model],
55
56
  list_display: list[Callable[..., Any] | str] | tuple[str],
56
57
  list_display_links: list[Callable[..., Any]] | list[str] | tuple[str] | None,
@@ -66,7 +67,7 @@ class ChangeList:
66
67
  ) -> None: ...
67
68
  def get_filters_params(self, params: None = ...) -> dict[str, str]: ...
68
69
  def get_filters(
69
- self, request: WSGIRequest
70
+ self, request: HttpRequest
70
71
  ) -> tuple[list[ListFilter], bool, dict[str, bool | str], bool]: ...
71
72
  def get_query_string(
72
73
  self,
@@ -81,15 +82,15 @@ class ChangeList:
81
82
  can_show_all: Any = ...
82
83
  multi_page: Any = ...
83
84
  paginator: Any = ...
84
- def get_results(self, request: WSGIRequest) -> None: ...
85
+ def get_results(self, request: HttpRequest) -> None: ...
85
86
  def get_ordering_field(
86
87
  self, field_name: Callable[..., Any] | str
87
88
  ) -> CombinedExpression | str | None: ...
88
89
  def get_ordering(
89
- self, request: WSGIRequest, queryset: QuerySet[Any]
90
+ self, request: HttpRequest, queryset: QuerySet[Any]
90
91
  ) -> list[OrderBy | Combinable | str]: ...
91
92
  def get_ordering_field_columns(self) -> OrderedDict[Any, Any]: ...
92
- def get_queryset(self, request: WSGIRequest) -> QuerySet[Any]: ...
93
+ def get_queryset(self, request: HttpRequest) -> QuerySet[Any]: ...
93
94
  def apply_select_related(self, qs: QuerySet[Any]) -> QuerySet[Any]: ...
94
95
  def has_related_field_in_list_display(self) -> bool: ...
95
96
  def url_for_result(self, result: Model) -> str: ...
@@ -1,14 +1,14 @@
1
1
  from collections.abc import Callable
2
2
  from typing import Any
3
3
 
4
- from django.core.handlers.wsgi import WSGIRequest
4
+ from django.http.request import HttpRequest
5
5
  from django.http.response import HttpResponse
6
6
  from django.utils.deprecation import MiddlewareMixin
7
7
 
8
8
  class XViewMiddleware(MiddlewareMixin):
9
9
  def process_view(
10
10
  self,
11
- request: WSGIRequest,
11
+ request: HttpRequest,
12
12
  view_func: Callable[..., Any],
13
13
  view_args: tuple[Any, ...],
14
14
  view_kwargs: dict[Any, Any],
@@ -2,7 +2,7 @@ from typing import Any
2
2
 
3
3
  from django.contrib.auth.backends import ModelBackend
4
4
  from django.contrib.auth.base_user import AbstractBaseUser
5
- from django.contrib.auth.models import AnonymousUser
5
+ from django.contrib.auth.models import AbstractUser, AnonymousUser
6
6
  from django.db.models.options import Options
7
7
  from django.http.request import HttpRequest
8
8
  from django.test.client import Client
@@ -18,15 +18,25 @@ REDIRECT_FIELD_NAME: str
18
18
 
19
19
  def load_backend(path: str) -> ModelBackend: ...
20
20
  def get_backends() -> list[ModelBackend]: ...
21
- def authenticate(request: Any = ..., **credentials: Any) -> AbstractBaseUser | None: ...
21
+ def authenticate(
22
+ request: HttpRequest | None = ..., **credentials: Any
23
+ ) -> AbstractUser | None: ...
22
24
  def login(
23
25
  request: HttpRequest,
24
26
  user: AbstractBaseUser | None,
25
27
  backend: type[ModelBackend] | str | None = ...,
26
28
  ) -> None: ...
27
29
  def logout(request: HttpRequest) -> None: ...
28
- def get_user_model() -> type[AbstractBaseUser]: ...
29
- def get_user(request: HttpRequest | Client) -> AbstractBaseUser | AnonymousUser: ...
30
+ async def aauthenticate(
31
+ request: HttpRequest = ..., **credentials: Any
32
+ ) -> AbstractBaseUser | None: ...
33
+ async def alogin(
34
+ request: HttpRequest,
35
+ user: AbstractBaseUser | None,
36
+ backend: type[ModelBackend] | str | None = ...,
37
+ ) -> None: ...
38
+ def get_user_model() -> type[AbstractUser]: ...
39
+ def get_user(request: HttpRequest | Client) -> AbstractUser | AnonymousUser: ...
30
40
  def get_permission_codename(action: str, opts: Options[Any]) -> str: ...
31
41
  def update_session_auth_hash(request: HttpRequest, user: AbstractBaseUser) -> None: ...
32
42
 
@@ -2,7 +2,7 @@ from collections.abc import Callable
2
2
  from typing import Any, TypeVar
3
3
 
4
4
  from django.contrib import admin
5
- from django.core.handlers.wsgi import WSGIRequest
5
+ from django.http.request import HttpRequest
6
6
  from django.http.response import HttpResponse
7
7
 
8
8
  _F = TypeVar("_F", bound=Callable[..., Any])
@@ -18,5 +18,5 @@ class UserAdmin(admin.ModelAdmin[Any]):
18
18
  add_form: Any = ...
19
19
  change_password_form: Any = ...
20
20
  def user_change_password(
21
- self, request: WSGIRequest, id: str, form_url: str = ...
21
+ self, request: HttpRequest, id: str, form_url: str = ...
22
22
  ) -> HttpResponse: ...