gpt4 book ai didi

python - create_user() 缺少 1 个必需的位置参数 : 'username'

转载 作者:行者123 更新时间:2023-12-04 08:49:51 25 4
gpt4 key购买 nike

我删除了 username字段,因为我希望用户能够使用他们的电子邮件地址登录,所以我在 models.py 中有这个:

class CustomUser(AbstractUser):
USER_TYPE = ((1, 'HOD'), (2, 'Staff'), (3, 'Student'))
username = None
email = models.EmailField(unique=True)
user_type = models.CharField(default=1, choices=USER_TYPE, max_length=1)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []


class Student(models.Model):
admin = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
gender = models.CharField(max_length=1, choices=GENDER)
address = models.TextField()
profile_pic = models.ImageField(upload_to='media')
session_start_year = models.DateField(null=True)
session_end_year = models.DateField(null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now_add=True)

在我的 views.py , 我试过 :
user = CustomUser.objects.create_user(email=email, password=password, user_type=3, first_name=first_name, last_name=last_name)
但是我得到了 create_user() 缺少 1 个必需的位置参数:“用户名”
我怎样才能解决这个问题?

最佳答案

你需要写一个 manager for a custom user model [Django-doc]重新实现 create_user方法。
因此,您可以实现 CustomUserManager :

from django.contrib.auth.hashers import make_password
from django.contrib.auth.models import UserManager

class CustomUserManager(UserManager):

def _create_user(self, email, password, **extra_fields):
email = self.normalize_email(email)
user = CustomUser(email=email, **extra_fields)
user.password = make_password(password)
user.save(using=self._db)
return user

def create_user(self, email, password=None, **extra_fields):
extra_fields.setdefault('is_staff', False)
extra_fields.setdefault('is_superuser', False)
return self._create_user(email, password, **extra_fields)

def create_superuser(self, email, password=None, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)

assert extra_fields['is_staff']
assert extra_fields['is_superuser']
return self._create_user(email, password, **extra_fields)

class CustomUser(AbstractUser):
# …

objects = CustomUserManager()
然后你将这个管理器注册为 objects经理。

关于python - create_user() 缺少 1 个必需的位置参数 : 'username' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64145745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com