You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This package contains [type stubs](https://www.python.org/dev/peps/pep-0561/) and a custom mypy plugin to provide more precise static types and type inference for Django framework. Django uses some Python "magic" that makes having precise types for some code patterns problematic. This is why we need this project. The final goal is to be able to get precise types for most common patterns.
12
11
13
-
14
12
## Installation
15
13
16
14
```bash
@@ -68,7 +66,6 @@ We rely on different `django` and `mypy` versions:
68
66
| 1.1.0 | 0.720 | 2.2.x | ^3.6
69
67
| 0.12.x | old semantic analyzer (<0.711), dmypy support | 2.1.x | ^3.6
70
68
71
-
72
69
## FAQ
73
70
74
71
### Is this an official Django project?
@@ -123,11 +120,12 @@ This happens because these Django classes do not support [`__class_getitem__`](h
123
120
124
121
### How can I create a HttpRequest that's guaranteed to have an authenticated user?
125
122
126
-
Django's built in [`HttpRequest`](https://docs.djangoproject.com/en/4.0/ref/request-response/#django.http.HttpRequest) has the attribute `user` that resolves to the type
123
+
Django's built in [`HttpRequest`](https://docs.djangoproject.com/en/4.1/ref/request-response/#django.http.HttpRequest) has the attribute `user` that resolves to the type
127
124
128
125
```python
129
126
Union[User, AnonymousUser]
130
127
```
128
+
131
129
where `User` is the user model specified by the `AUTH_USER_MODEL` setting.
132
130
133
131
If you want a `HttpRequest` that you can type-annotate with where you know that the user is authenticated you can subclass the normal `HttpRequest` class like so:
@@ -143,7 +141,6 @@ class AuthenticatedHttpRequest(HttpRequest):
143
141
144
142
And then use `AuthenticatedHttpRequest` instead of the standard `HttpRequest` for when you know that the user is authenticated. For example in views using the `@login_required` decorator.
145
143
146
-
147
144
### My QuerySet methods are returning Any rather than my Model
148
145
149
146
If you are using `MyQuerySet.as_manager()`:
@@ -208,9 +205,7 @@ class MyManager(model.Manager):
208
205
209
206
will cause this error message:
210
207
211
-
```
212
-
error: Return type "MyModel" of "create" incompatible with return type "_T" in supertype "BaseManager"
213
-
```
208
+
> error: Return type "MyModel" of "create" incompatible with return type "_T" in supertype "BaseManager"
214
209
215
210
This is happening because the `Manager` class is generic, but without
216
211
specifying generics the built-in manager methods are expected to return the
### Why am I getting incompatible argument type mentioning `_StrPromise`?
295
+
296
+
The lazy translation functions of Django (such as `gettext_lazy`) return a `Promise` instead of `str`. These two types [cannot be used interchangeably](https://github.com/typeddjango/django-stubs/pull/1139#issuecomment-1232167698). The return type of these functions was therefore [changed](https://github.com/typeddjango/django-stubs/pull/689) to reflect that.
297
+
298
+
If you encounter this error in your own code, you can either cast the `Promise` to `str` (causing the translation to be evaluated), or use the `StrPromise` or `StrOrPromise` types from `django-stubs-ext` in type hints. Which solution to choose depends depends on the particular case. See [working with lazy translation objects](https://docs.djangoproject.com/en/4.1/topics/i18n/translation/#working-with-lazy-translation-objects) in the Django documentation for more information.
299
+
300
+
If this is reported on Django code, please report an issue or open a pull request to fix the type hints.
299
301
300
302
## Related projects
301
303
@@ -304,8 +306,6 @@ def foo(obj: object) -> None:
304
306
-[`pytest-mypy-plugins`](https://github.com/typeddjango/pytest-mypy-plugins) - `pytest` plugin that we use for testing `mypy` stubs and plugins.
305
307
-[`wemake-django-template`](https://github.com/wemake-services/wemake-django-template) - Create new typed Django projects in seconds.
306
308
307
-
308
-
309
309
## To get help
310
310
311
311
We have Gitter here: <https://gitter.im/mypy-django/Lobby>
0 commit comments