【问题标题】:can't create super user with a CustomUserManager in django 3.2.2无法在 django 3.2.2 中使用 CustomUserManager 创建超级用户
【发布时间】:2021-07-31 02:17:47
【问题描述】:

我正在尝试创建一个超级用户,但无论我做了什么更改,我仍然收到此错误:

文件“D:\python\gambling_game\gamegambling\users\models.py”,第 40 行,在 create_superuser 中

return self.create_user(self, email, pseudo, first_name, last_name,birth_date, password, **other_fields)

TypeError: create_user() 接受 7 个位置参数,但给出了 8 个

我多次查看代码,但没有发现错误。

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import AbstractBaseUser , PermissionsMixin , BaseUserManager
from django.utils.translation import gettext_lazy as _
from datetime import datetime

# Create your models here.
class CustomUserManager(BaseUserManager):

def create_user(self, email, pseudo, first_name, last_name, birth_date, password, **other_fields):
    if not email:
        raise ValueError(_('Please enter an email address'))
    email = self.nomalize_email(email)

    if bith_isValid(birth_date):
        birth_date = birth_date
    else:
        raise ValueError(_('birth date not valid'))
    
    user = self.models(email = email, pseudo = pseudo , first_name = first_name,
                        last_name = last_name, birth_date = birth_date, **other_fields)
    user.set_password(password)
    user.save()
    return user

def create_superuser(self, email, pseudo, first_name, last_name, birth_date, password, **other_fields):

    other_fields.setdefault('is_staff', True)
    other_fields.setdefault('is_superuser', True)
    other_fields.setdefault('is_active', True)

    if other_fields.get('is_staff') is not True:
        raise ValueError('Superuser must be assigned to is_staff=True')
    if other_fields.get('is_superuser') is not True:
        raise ValueError('Superuser must be assigned to is_superuser=True')
    if other_fields.get('is_active') is not True:
        raise ValueError('Superuser must be assigned to is_active=True')
    
    return self.create_user(self, email, pseudo, first_name, last_name, birth_date, password, **other_fields)






def bith_isValid(date):
   present = datetime.date.today()
   return date < present

class CustomUser (AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(max_length = 255, unique = True)
    pseudo = models.CharField(max_length = 255, unique = True)
    #prenom
    first_name = models.CharField(max_length = 255)
    #nom
    last_name = models.CharField(max_length = 255)
    USER_GENDER = [ ('M', 'Male'),
                  ('F', 'Female'),
                  ('NB', 'Non-Binary')]
    gender = models.CharField(max_length = 2, choices = USER_GENDER, null = True)
    birth_date = models.DateField(auto_now=False, auto_now_add=False)
    balance = models.IntegerField(default = 0)
    profil_picture = models.ImageField(upload_to='profile_image', blank = True)
    is_staff = models.BooleanField(default = False)
    is_active = models.BooleanField(default = False)
    last_login = models.DateTimeField(auto_now=True)
    join_date = models.DateTimeField(default = timezone.now)

    objects = CustomUserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['pseudo','first_name','last_name','birth_date']

    def __str__(self):
       return self.pseudo

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    不要将 self 传递给函数调用 self...
    改变这个:

       return self.create_user(self, email, ps...)
    

    到这里:

       return self.create_user(email, ps
    

    PS:可能是复制粘贴错误;)我们都这样做了。

    【讨论】:

    • @uriel 有趣的是,人们如何一遍又一遍地查看它,直到其他人来帮助时才看到它......一直都在发生。很高兴为您提供帮助;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 2015-12-08
    • 2023-03-13
    • 2017-06-27
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多