Как создавать пользователей в Django?

Я пытаюсь использовать модель пользователя Django, но не могу создать нового пользователя. Я уже выполнил команды python manage.py makemigrations и python manage.py migrate. Если я пытаюсь запустить команды снова, я получаю сообщение "Изменения не обнаружены"

Я смог создать суперпользователя для Django admin, и я могу использовать этого пользователя для входа в мое веб-приложение, используя представления, которые я создал, но если я пытаюсь создать пользователя, он не появляется в Django admin.

models.py

from django.db import models
from django.contrib.auth.models import AbstractUser

# Create your models here.
class User(AbstractUser):
    pass

views.py для создания пользователя

def register(request):
    if request.method == "POST":
        username = request.POST["username"]
        password = request.POST["password"]
        confirm = request.POST["confirm"]
        if password != confirm:
            return render(request, "capstone/register.html",{
                "error_message": "Your passwords must match."
            })

        try:
            user = User.objects.create_user(username, password)
            user.save()
        except IntegrityError:
            return render(request, "capstone/register.html",{
                "error_message": "You will need to pick another username."
            })
        login(request, user)
        return HttpResponseRedirect(reverse("index"))

    else:
        return render(request, "capstone/register.html")

Я также добавил AUTH_USER_MODEL = 'capstone.User' в setup.py моего проекта.
Я также просмотрел эту документацию, но это не помогло.

Кто-нибудь знает, как решить эту проблему?

При использовании функции create_user необходимо сначала создать функцию create_user в models.py

models.py

from django.db import models
from django.contrib.auth.models import (BaseUserManager, AbstractBaseUser)

class UserManager(BaseUserManager):
    def create_user(self, email, password=None):
        """
        Creates and saves a User with the given email and password.
        """
        if not email:
            raise ValueError('Users must have an email address')

        user = self.model(
            email=self.normalize_email(email),
        )

        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_staffuser(self, email, password):
        """
        Creates and saves a staff user with the given email and password.
        """
        user = self.create_user(
            email,
            password=password,
        )
        user.staff = True
        user.save(using=self._db)
        return user

def create_superuser(self, email, password):
        """
        Creates and saves a superuser with the given email and password.
        """
        user = self.create_user(
            email,
            password=password,
        )
        user.staff = True
        user.admin = True
        user.save(using=self._db)
        return user

class User(AbstractBaseUser):
    pass

    objects = UserManager()

settings.py

AUTH_USER_MODEL = 'accounts.User'

Для получения дополнительной информации: https://www.codingforentrepreneurs.com/blog/how-to-create-a-custom-django-user-model/

class User(AbstractBaseUser, PermissionsMixin):
    """
    Custom User model with email as the primary identifier field.
    """
    email = models.EmailField(_('email address'),max_length=255,unique=True,)
    username = models.CharField(max_length=15,blank=True,null=True)
    is_staff = models.BooleanField(_('staff status'),default=False,help_text=_('Designates whether the user can log into this admin site.'),)
    is_active = models.BooleanField(_('active'),
    default=True,
    help_text=_(
        'Designates whether this user should be treated as active. '
        'Unselect this instead of deleting accounts.'
    ),
    )
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
    uuid_txt = models.CharField(
    _('uuid text'),
    max_length=36,
    unique=True,
    help_text=_(
        'UUID representing this user. '
        'Helps identify this user without their user ID and can be shared 
    publicly.'
    ),
    error_messages={
        'unique': _('A user with that uuid_txt already exists.'),
    },
    )
    deleted = models.DateTimeField(default=None,blank=True, null=True)
    is_deleted = models.BooleanField(default=False)


    objects = UserManager()

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

Другой ответ не решил мою проблему, поэтому я последовал этому учебнику, который подробно объясняет, как сделать пользовательскую модель пользователя.

Вернуться на верх