我有一个自定义用户,使用AbstractUser只是为了给它添加时间戳和FK
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.conf import settings
from .managers import CustomUserManager
class SubUser(AbstractUser):
if settings.DEBUG:
parent_user_id = models.ForeignKey('self', on_delete=models.DO_NOTHING, null=True, blank=True)
else:
parent_user_id = models.ForeignKey('self', on_delete=models.RESTRICT, null=True, blank=True)
# Timestamps
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
USERNAME_FIELD = "username"
objects = CustomUserManager()
def __str__(self):
return self.username
我读到,为了很好地加密密码,我必须创建一个Manager:
from django.contrib.auth.base_user import BaseUserManager
class CustomUserManager(BaseUserManager):
def create_user(self, username, password=None, **extra_fields):
user = self.model(username=username, **extra_fields)
print(username)
print(password)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, username, password=None, **extra_fields):
user = self.create_user(username, password, **extra_fields)
user.is_staff = True
user.is_superuser = True
user.save(using=self._db)
return user
当我从shell 创建超级用户时:
u = SubUser.objects.create_superuser(username='asd', password='asdasd')
个
实例创建成功,密码被加密,我以该超级用户登录admin/即可工作
但如果我创建一个普通用户:
u = SubUser.objects.create_user(username='qwe', password='qweqwe')
实例创建成功,密码已加密,但我在admin/中的登录不起作用
现在,我还读到,如果我使用自定义用户,我应该使用我的管理器,在我所做的shell 中:
user_manager = CustomUserManager()
new_user = user_manager.create_user(username='qwe', password='qweqwe')
并得到一个错误
user.save(using=self._db)
TypeError: 'NoneType' object is not callable
我做错什么了? 用户在数据库中的记录很好,我直接看了数据库 我用的是Django 5.0.1和Sqlite3
当我从shell 创建超级用户时:
u = SubUser.objects.create_superuser(username='asd', password='asdasd')
个
实例创建成功,密码被加密,我以该超级用户登录admin/即可工作
但如果我创建一个普通用户:
u = SubUser.objects.create_user(username='qwe', password='qweqwe')
实例创建成功,密码已加密,但我在admin/中的登录不起作用
现在,我还读到,如果我使用自定义用户,我应该使用我的管理器,在我所做的shell 中:
user_manager = CustomUserManager()
new_user = user_manager.create_user(username='qwe', password='qweqwe')
并得到一个错误
user.save(using=self._db)
TypeError: 'NoneType' object is not callable
我做错了什么?应该正确创建用户,但他们没有正确创建 用户在数据库中的记录很好,我直接看了数据库 我用的是Django 5.0.1和Sqlite3