Написание пользовательской аутентификации пользователя с помощью электронной почты с использованием django

Этот код предназначен для создания пользовательской аутентификации, которая принимает email и пароль для входа в систему вместо имени пользователя и пароля.

Каждый раз, когда я использую "python manage.py createsuperuser" и ввожу свои данные, я всегда получаю сообщение об ошибке, которое гласит: "return self._create_user(email, password, first_name, last_name, mobile, password, **extra_fields) TypeError: CustomUserManager._create_user() принимает 6 позиционных аргументов, но было задано 7"

Как мне это сделать

models.py

    from django.db import models
    from datetime import datetime
    from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager


    class CustomUserManager(BaseUserManager):
        def _create_user(self, email, password, first_name, last_name, mobile, **extra_fields):
            if not email:
                raise ValueError("Email must be provided")
            if not password:
                raise ValueError("Password must be provided")
    
            user =  self.model(
                email = self.normalize_email(email),
                first_name = first_name,
                last_name = last_name,
                mobile = mobile,
                **extra_fields,
            )

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

        def create_user(self, email, password, first_name, last_name, mobile, **extra_fields):
            extra_fields.setdefault("is_active", True)
            extra_fields.setdefault("is_staff", True)
            extra_fields.setdefault("is_superuser", False)
            return self._create_user(email, password, first_name, last_name, mobile, password, **extra_fields)

        def create_superuser(self, email, password, first_name, last_name, mobile, **extra_fields):
            extra_fields.setdefault("is_active", True)
            extra_fields.setdefault("is_staff", True)
            extra_fields.setdefault("is_superuser", True)
            return self._create_user(email, password, first_name, last_name, mobile, password, **extra_fields)



    class User(AbstractBaseUser, PermissionsMixin):
        email = models.EmailField(db_index=True, unique=True, max_length=254)
        first_name = models.CharField(max_length=250)
        last_name = models.CharField(max_length=250)
        mobile = models.CharField(max_length=50)
        address = models.CharField(max_length=250)

        is_staff = models.BooleanField(default=True)
        is_superuser = models.BooleanField(default=True)
        is_superuser = models.BooleanField(default=False)

        objects = CustomUserManager()

        USERNAME_FIELD = 'email'
        REQUIRED_FIELDS = ['first_name', 'last_name', 'mobile']

        class Meta:
            verbose_name = "User"
            verbose_name_plural = "Users"

settings.py

    AUTH_USER_MODEL = "myappname.User"

Это важные части кода.

Вы дважды посылаете password в _create_user() в create_user() методе

return self._create_user(email, password, first_name, last_name, mobile, password, **extra_fields)
Вернуться на верх