【问题标题】:Django create_superuser() missing 1 required positional argument: 'username'Django create_superuser() 缺少 1 个必需的位置参数:“用户名”
【发布时间】:2020-04-06 04:08:37
【问题描述】:
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager

# Create your models here.

class MyAccountManager(BaseUserManager):
    def create_user(self, email, username, password=None):
        if not email:
            raise ValueError('user must have smartcard')
        if not username:
            raise ValueError('must have username')

        user = self.create_user(
            email=self.normalize_email(email),
            username=username,

        )

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

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


class Account(AbstractBaseUser):

    username = models.CharField(max_length=100, unique=True)

    email = models.EmailField(verbose_name="email", max_length=30, unique=True)
    department = models.CharField(max_length=30, choices=DEPARTMENT)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELD = ['username',]

    objects=MyAccountManager()

    def __str__(self):
        return self.email   

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

    def has_module_perms(self, app_label):
        return True   

我就是不知道哪里出了问题。

创建超级用户时提示不要求我输入用户名

我也修改了 settings.py 文件。 用各种数据库尝试了几次。 我还在 REQUIRED_FIELDS 部分添加了用户名。

【问题讨论】:

标签: django django-models django-authentication


【解决方案1】:

欢迎来到 SO,@Omkar。

您只需将字段REQUIRED_FIELD 更改为REQUIRED_FIELDS

REQUIRED_FIELDS = ['username']

您可以在docs上查看。

【讨论】:

    【解决方案2】:

    @Omkar Kale,请看你的方法:

    def create_superuser(self, email, username, password):
        user = self.create_user(
            email=self.normalize_email(email),
            password=password,
            username=username,
        )
    

    请改一下:

     def create_superuser(self, username, email, password):
    
        user = self.create_user(
            username=username,
            email=self.normalize_email(email),
            password=password,
    
            )
    

    你看,你需要根据参数传递值。所以

    • 第一:用户名,
    • 第二:电子邮件
    • 第三个密码。

    那么您将不再收到位置参数错误。你必须根据参数的位置来传递它们。

    【讨论】:

    • 这并不能解决问题中的问题,但总的来说是一个很好的建议——一致的论点顺序。
    猜你喜欢
    • 1970-01-01
    • 2019-08-09
    • 2018-09-03
    • 1970-01-01
    • 2018-06-20
    • 2021-01-16
    • 2017-10-20
    • 1970-01-01
    • 2022-06-28
    相关资源
    最近更新 更多