New files
app/managers.py
from django.contrib.auth.models import BaseUserManager
from django.utils.translation import gettext_lazy as _
class UserProfileManager(BaseUserManager):
    def create_user(self, email, password=None, **extra_fields):
        if not email:
            raise ValueError(_("The Email must be set"))
        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=None, **extra_fields):
        extra_fields.setdefault("is_staff", True)
        extra_fields.setdefault("is_superuser", True)
        if extra_fields.get("is_staff") is not True:
            raise ValueError(_("Superuser must have is_staff=True"))
        if extra_fields.get("is_superuser") is not True:
            raise ValueError(_("Superuser must have is_superuser=True"))
        return self.create_user(email, password, **extra_fields)
Modified files
locale/es/LC_MESSAGES/django.po
--- 
+++ 
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-11-15 12:54+0000\n"
+"POT-Creation-Date: 2024-11-15 13:00+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -19,42 +19,58 @@
 "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? "
 "1 : 2;\n"
-#: app/models.py:23
+#: app/managers.py:8
+msgid "The Email must be set"
+msgstr "El correo electrónico debe estar establecido"
+
+#: app/managers.py:20
+msgid "Superuser must have is_staff=True"
+msgstr "El superusuario debe tener is_staff=True"
+
+#: app/managers.py:22
+msgid "Superuser must have is_superuser=True"
+msgstr "El superusuario debe tener is_superuser=True"
+
+#: app/models.py:18
+msgid "email address"
+msgstr "dirección de correo electrónico"
+
+#: app/models.py:29
 msgid "Article"
 msgstr "Artículo"
-#: app/models.py:24
+#: app/models.py:30
 msgid "Articles"
 msgstr "Artículos"
-#: app/models.py:26
+#: app/models.py:32
 msgid "title"
 msgstr "título"
-#: app/models.py:27
+#: app/models.py:33
 msgid "content"
 msgstr "contenido"
-#: app/models.py:28
+#: app/models.py:34
 msgid "word count"
 msgstr "recuento de palabras"
-#: app/models.py:29
+#: app/models.py:35
 msgid "twitter post"
 msgstr "post de twitter"
-#: app/models.py:31
+#: app/models.py:37
 msgid "status"
 msgstr "estado"
-#: app/models.py:36
+#: app/models.py:42
 msgid "created at"
 msgstr "creado en"
-#: app/models.py:37
+#: app/models.py:43
 msgid "updated at"
 msgstr "actualizado en"
-#: app/models.py:40
+#: app/models.py:46
 msgid "creator"
 msgstr "creador"
app/models.py
--- 
+++ 
@@ -5,6 +5,7 @@
 from django.contrib.auth.models import AbstractUser
 from django.utils.translation import gettext_lazy as _
+from app.managers import UserProfileManager
 ARTICLE_STATUS = (
     ("draft", "draft"),
@@ -14,7 +15,12 @@
 class UserProfile(AbstractUser):
-    pass
+    email = models.EmailField(_("email address"), max_length=255, unique=True)
+
+    objects = UserProfileManager()
+
+    USERNAME_FIELD = "email"
+    REQUIRED_FIELDS = []
 class Article(models.Model):
djangocourse/settings.py
                    --- 
+++ 
@@ -149,7 +149,7 @@
 # Internationalization
 # https://docs.djangoproject.com/en/5.1/topics/i18n/
-LANGUAGE_CODE = 'es'  # remember to change this back to en-us!
+LANGUAGE_CODE = 'en-us'  # remember to change this back to en-us!
 TIME_ZONE = 'UTC'