python - AUTH_USER_MODEL 指的是尚未安装的模型 '%s'"
问题描述
我在我的模型中使用 CustomUser。这是用户管理器。
class UserManager(BaseUserManager):
def create_user(self, email, username, password=None, is_staff=False, is_superuser=False, is_active=False,
is_bot=False, is_mobile_verified=False, is_online=True, is_logged_in=True):
logger = logging.getLogger(__name__)
logger.info("REGULAR user created!")
if not email:
raise ValueError('Email is required')
if not username:
raise ValueError('Username is required.')
email = self.normalize_email(email)
user = self.model(email=email, username=username, is_staff=is_staff, is_superuser=is_superuser,
is_active=is_active, is_bot=is_bot, is_mobile_verified=is_mobile_verified,
is_online=is_online, is_logged_in=is_logged_in)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, username, password):
logger = logging.getLogger(__name__)
logger.info("SUPER user created!")
return self.create_user(email, username, password=password, is_staff=True, is_superuser=True, is_active=True,
is_bot=False, is_mobile_verified=False, is_online=True, is_logged_in=True)
这是我对自定义用户模型的定义。
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True, max_length=255)
mobile = PhoneNumberField(null=True)
username = models.CharField(null=False, unique=True, max_length=255)
full_name = models.CharField(max_length=255, blank=True, null=True)
birthday = models.DateField(null=True)
gender = models.CharField(max_length=255, null=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)
is_mobile_verified = models.BooleanField(default=False)
is_online = models.BooleanField(default=False)
is_logged_in = models.BooleanField(default=True)
is_bot = models.BooleanField(default=False)
location = models.ForeignKey(Location, on_delete=models.SET_NULL, null=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
#objects = UserManager()
get_user_model().objects.create_user(...)
如果我取消注释该行objects = UserManager()
,那么我可以运行服务器,但从管理后端创建的超级用户无法登录。如果我使用get_user_model()
代码中断,我会收到以下错误
"AUTH_USER_MODEL refers to model '%s' that has not been installed" % settings.AUTH_USER_MODEL
django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL refers to model 'bouncer.User' that has not been installed
但是在我的 settings.py 中,我定义了 auth 用户模型
AUTH_USER_MODEL = 'bouncer.User'
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
)
我在这里做错了什么?
解决方案
对于 2020 年阅读此书的任何人,我怀疑问题与依赖性有关。我遇到了与 OP 相同的错误。
您的前两项检查应该是:
1 - 该应用程序是否installed apps
在您的列表中settings.py
?
2 -AUTH_USER_MODEL = "app_name_from_apps_py.model_name"
设置在settings.py
吗?
这是我读到的大多数其他回复。
我在阅读文档时没有意识到要使用get_user_model()
你需要先建立你的模型。当然,对吧?!
所以在上面,OP 使用的地方get_user_model()
,他们正在创建一个循环依赖。
您不能get_user_model()
在创建此模型的类中使用。
推荐阅读
- php - 在字段上对 MySQL 表进行排序,并通过 PHP 中的单独电子邮件为该字段下的每个子组发送输出
- vue.js - 强制 Prettier 将内部文本放在新行上,不带尾随 >
- python - Django/Python:原始 SQL 查询 - 错误绑定参数
- rust - std::result 与 core::result::Result
- windows - 比较批处理脚本中的数字数组
- python - 使用 for 循环从列表中删除字符
- julia - 无法将 Array{Any,2} 转换为系列数据以进行绘图
- java - 龙目岛私人建设者
- numpy - “张量”对象没有“分离”属性
- node.js - Cheerio,抓取时得到 403