From 4dd7d8628d1eb5ad66dfc1836c28ad8df15866a9 Mon Sep 17 00:00:00 2001 From: Tobias Kunze Date: Sun, 16 Mar 2025 09:22:33 +0100 Subject: [PATCH] Make sure ``createuser`` and ``createsuperuser`` work --- src/servala/core/models/user.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/servala/core/models/user.py b/src/servala/core/models/user.py index a514420..c95fddf 100644 --- a/src/servala/core/models/user.py +++ b/src/servala/core/models/user.py @@ -1,11 +1,36 @@ -from django.contrib.auth.models import AbstractBaseUser +from django.contrib.auth.models import AbstractBaseUser, BaseUserManager from django.db import models from django.utils.translation import gettext_lazy as _ +class UserManager(BaseUserManager): + """ + Use a separate model manager, as we do not have a username field. + """ + + use_in_migrations = True + + def create_user(self, email, password, **extra_fields): + if not email: + raise ValueError("Please provide an email address.") + email = self.normalize_email(email) + user = self.model(email=email, **extra_fields) + user.set_password(password) + user.save(using=self._db) + return user + + def create_superuser(self, email, password, **extra_fields): + """Create and save a SuperUser with the given email and password.""" + extra_fields["is_staff"] = True + extra_fields["is_superuser"] = True + return self.create_user(email, password, **extra_fields) + + class User(AbstractBaseUser): """The Django model provides a password and last_login field.""" + objects = UserManager() + email = models.EmailField(unique=True, verbose_name=_("Email address")) first_name = models.CharField( max_length=30, blank=True, verbose_name=_("First name")