Skip to content

Commit df73004

Browse files
authored
Merge pull request #4836 from foarsitter/mypy_generic_user_manager
Generic UserManager
2 parents 2735635 + 52e7b05 commit df73004

2 files changed

Lines changed: 13 additions & 4 deletions

File tree

{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/managers.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1+
from typing import TYPE_CHECKING
2+
13
from django.contrib.auth.hashers import make_password
24
from django.contrib.auth.models import UserManager as DjangoUserManager
35

6+
if TYPE_CHECKING:
7+
from {{ cookiecutter.project_slug }}.users.models import User # noqa: F401
8+
49

5-
class UserManager(DjangoUserManager):
10+
class UserManager(DjangoUserManager["User"]):
611
"""Custom manager for the User model."""
712

813
def _create_user(self, email: str, password: str | None, **extra_fields):
@@ -17,12 +22,12 @@ def _create_user(self, email: str, password: str | None, **extra_fields):
1722
user.save(using=self._db)
1823
return user
1924

20-
def create_user(self, email: str, password: str | None = None, **extra_fields):
25+
def create_user(self, email: str, password: str | None = None, **extra_fields): # type: ignore[override]
2126
extra_fields.setdefault("is_staff", False)
2227
extra_fields.setdefault("is_superuser", False)
2328
return self._create_user(email, password, **extra_fields)
2429

25-
def create_superuser(self, email: str, password: str | None = None, **extra_fields):
30+
def create_superuser(self, email: str, password: str | None = None, **extra_fields): # type: ignore[override]
2631
extra_fields.setdefault("is_staff", True)
2732
extra_fields.setdefault("is_superuser", True)
2833

{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/models.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
{%- if cookiecutter.username_type == "email" %}
2+
from typing import ClassVar
3+
{%- endif %}
4+
15
from django.contrib.auth.models import AbstractUser
26
from django.db.models import CharField{% if cookiecutter.username_type == "email" %}, EmailField{% endif %}
37
from django.urls import reverse
@@ -26,7 +30,7 @@ class User(AbstractUser):
2630
USERNAME_FIELD = "email"
2731
REQUIRED_FIELDS = []
2832

29-
objects = UserManager()
33+
objects: ClassVar[UserManager] = UserManager()
3034
{%- endif %}
3135

3236
def get_absolute_url(self) -> str:

0 commit comments

Comments
 (0)