【发布时间】:2021-10-06 18:34:17
【问题描述】:
我创建了一个自定义用户模型和管理器,但管理器中的 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
【问题讨论】:
-
究竟是什么问题?它是否打印错误,是否未保存到数据库中?请提供有关 hat 不起作用的信息。
-
我没有收到错误,但我的用户没有保存在数据库中。我发现 create_user 函数在用户创建时没有运行。
标签: python django api django-rest-framework