Django create_superuser() 缺少1个必需的位置参数: 'username'

3
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部分中添加了用户名。


请在您的问题中包含堆栈跟踪。 - aaron
这个回答解决了你的问题吗?在实现自定义用户模型时使用createsuperuser出现问题 - aaron
2个回答

2
欢迎来到SO,@Omkar。
您只需要将字段REQUIRED_FIELD更改为REQUIRED_FIELDS即可。
REQUIRED_FIELDS = ['username']

您可以在文档上进行检查。

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,

        )

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

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

然后,您将不再收到位置参数错误。您必须根据参数的位置传递它们。


这并没有解决问题,但是在一般情况下,这是一个好建议——参数的一致顺序。 - aaron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接