python - CustomUserManager 中的函数 create_user 不起作用
问题描述
我创建了一个自定义用户模型和管理器,但管理器中的 create_user 函数不起作用。我的错是什么?
这是我的模型:
class User(AbstractUser):
email = models.EmailField(null = True, blank = True)
is_superuser = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
phone_number = models.BigIntegerField(unique=True)
is_owner = models.BooleanField(default=False)
is_advisor = models.BooleanField(default=False)
name = models.CharField(max_length=40, null = True, blank = True)
image = models.ImageField(blank = True, null=True)
data_join = models.DateTimeField(default = timezone.now)
code_agency = models.IntegerField(null=True, blank=True, default=0)
opt = models.IntegerField(null = True, blank = True)
is_verified = models.BooleanField(default = False)
USERNAME_FIELD = 'phone_number'
REQUIRED_FIELDS = []
objects = UserCustomManager()
def __str__(self):
return str(self.phone_number)
class Meta:
verbose_name = 'user'
verbose_name_plural = 'users'
这是我的经理:
class UserCustomManager(BaseUserManager):
use_in_migrations = True
def _create_user(self, phone_number, **extra_fields):
if not phone_number:
raise ValueError('The given phonenumber must be set')
print("""
========================
========================
========================
""")
user = self.model(phone_number=phone_number, username=phone_number, **extra_fields)
user.set_password("green")
# Token.objects.create(user=user)
user.save(using=self._db)
return user
def create_user(self, phone_number, **extra_fields):
extra_fields.setdefault('is_staff', False)
extra_fields.setdefault('is_superuser', False)
digits = "0123456789"
print("""
========================
========================
========================
""")
OTP = ""
for i in range(4) :
OTP += digits[math.floor(random.random() * 10)]
extra_fields.setdefault('opt', OTP)
return self._create_user(phone_number, **extra_fields)
def create_superuser(self, phone_number, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
if extra_fields.get('is_staff') is not True:
raise ValueError('Superuser must have is_staff=True.')
if extra_fields.get('is_superuser') is not True:
raise ValueError('Superuser must have is_superuser=True.')
return self._create_user(phone_number, **extra_fields)
我在我的代码中设置了一些打印,当我想从视图创建新用户时,我发现 create_user 没有运行,但是当我想从终端创建超级用户时,其他函数(如 create_superuser 或 _create_user)工作。
最后这是我在序列化程序中的代码:
class RegestrationSerializers(serializers.ModelSerializer):
class Meta:
model = User
fields = [
'phone_number',
]
def save(self):
account = User(
phone_number = self.validated_data['phone_number'],
)
account.is_verified = False
return account
解决方案
在序列化程序中,您没有调用create_user
方法。当您实例化User
类时,django 不会自动在 DB 中创建记录。您需要调用save()
或create_user()
手动:
def save(self):
account = User.objects.create_user(
phone_number = self.validated_data['phone_number'], is_verified=False
)
return account
推荐阅读
- r - 频率为 365.25 的时间序列未在更新的 R 版本中运行任何预测包功能
- c# - C# 动态动作生成
- javascript - 无法隐藏由 javascript 创建的 div
- scala - 仅从 Spark Scala DataFrame 写入标头 CSV 记录
- bpmn - Camunda BPMN/CMMN:访问历史用户任务和表单数据
- ldap - 角色不适用于 (LDAP) Active Directory
- mongodb - mongo shell - 转到匹配的括号/花括号
- ssrs-2012 - SSRS 报告显示两个单独的日期条目。需要日期然后与该日期相关的所有详细信息
- python - 属性设置器方法在类创建时不起作用
- java - Google Calendar API JAVA Update 事件突然无法正常工作