1

I always get the message "Please enter the correct email and password for a staff account. Note that both fields may be case-sensitive." I write in settings.py AUTH_USER_MODEL = 'eCommerce.User'. And after I run makemigrations and migrate command I use these commands: python manage.py createsuperuser and then python manage.py runserver. There is no errors in cmd but in the Django administration the above message shows.

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

class UserManager(BaseUserManager):
    def create_user(self,email,name,password=None):
        if not email:
            raise ValueError("Users must enter an email address.")
        if not name:
            raise ValueError("Users must enter a name.")

        user = self.model(
                email= self.normalize_email(email),
                name= name,
                #phone_number = phone_number,
               
            )
        user.set_password=password
        user.save(using=self._db)
        return user

    def create_superuser(self,email,name,password=None):
        user = self.create_user(
                name= name,
                email= self.normalize_email(email),
                password= password
            )
        user.is_admin = True
        user.is_active = True
        user.is_staff = True
        user.is_superuser = True
        user.save(using= self._db)
        return user



class Address(models.Model):
    street = models.CharField(max_length=50)
    city = models.CharField(max_length=20)
    postal_code = models.CharField(max_length=10)

class User(AbstractBaseUser):
    email = models.EmailField(verbose_name='email', max_length=50, unique=True)
    name = models.CharField(max_length=30)
    phone_number = models.CharField(max_length=20)
    billing_address = models.ForeignKey(Address, on_delete=models.CASCADE, null=True 
                                        ,related_name='billing_address')
    shipping_address = models.ForeignKey(Address, on_delete=models.CASCADE, null=True, 
                                         related_name='shipping_address')
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    #is_superuser = models.BooleanField(default=False)
    #is_staff = models.BooleanField(default=False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['name']
    objects = UserManager()
    def __str__(self):
        return "Email: " + str(self.email) + "Name: " + str(self.name)

    def has_perm(self, perm, obj=None):
        return self.is_admin

    def has_module_perms(self, app_label):
        return True

1 Answers1

0

add this under your user model

@property
    def is_staff(self):
        "Is the user a member of staff?"
       
        return self.is_staff

or simply write it as 

@property
    def is_staff(self):
        "Is the user a member of staff?"
        # Simplest possible answer: All admins are staff
        return self.is_admin