首页 > 解决方案 > 我正在尝试在 django 中制作模型。但错误。为什么?

问题描述

我是新手编码员。我正在尝试制作模型。但是当我成为超级用户时,总是出现错误这是我的代码。我使用 abstractbaseuser 并创建帐户。我的帐户包含用户名、用户 ID、公司、公司代码。不使用密码。但我不知道如何解决这个错误 粗体

from django.contrib.auth.models import(BaseUserManager, AbstractBaseUser, PermissionsMixin)
from django.db import models
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _

class UserManager(BaseUserManager):
    def create_account(self, username, userid, company, company_code, password=None):
        if not username:
            raise ValueError(_('Users must have an name!'))

        user = self.model(
            Name=username,
            UserId = userid,
            Company= company,
            Code = company_code,
        )

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

    def create_superuser(self, username, userid, company, company_code, password):
        user = self.create_user(
            Name=username,
            UserId = userid,
            Company = company,
            Code = company_code,
            password=password,
        )
        user.Name = True
        user.is_superuser = True
        user.is_admin = True
        user.is_staff = True
        user.save(self._db)
        return user



class User(AbstractBaseUser):
    Name = models.CharField(max_length=10, unique=True)
    UserId = models.CharField(max_length=100, unique=True)
    Company = models.CharField(max_length=10)
    Code = models.CharField(max_length=100)
    Created_date = models.DateTimeField(auto_now_add=True)
    is_admin = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)

    class Meta:
        db_table = 'user'

    objects = UserManager()
    USERNAME_FIELD = 'Name'
    REQUIRED_FIELDS = ['UserId', 'Company', 'Code']

    def __str__(self):
        return self.Name
    def get_full_name(self):
        return self.Name
    def get_short_name(self):
        return self.Name

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

这是我命令 createsuperuser 时的错误

  File "manage.py", line 21, in <module>
    main()
  File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 328, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.7/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 79, in execute
    return super().execute(*args, **options)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 369, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python3.7/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 189, in handle
    self.UserModel._default_manager.db_manager(database).create_superuser(**user_data)
TypeError: create_superuser() got an unexpected keyword argument 'Name'

标签: pythondjango

解决方案


你用错误的参数调用它。在 youcreate_superuser中,你写:

def create_superuser(self, username, userid, company, company_code, password):
    user = self.create_user(
        Name=username,
        UserId=userid,
        Company=company,
        Code=company_code,
        password=password,
    )
    # …

但是您的create_user方法没有 Name参数等。您将这些传递为username,userid等:

def create_superuser(self, username, userid, company, company_code, password):
    user = self.create_user(
        username=username,
        userid=userid,
        bompany=company,
        company_code=company_code,
        password=password,
    )
    # …

注意:通常 Django 模型中的字段名称是用 snake_case 编写的而不是PerlCase,所以它应该是:UserId而不是user_id.


推荐阅读