【问题标题】:AUTH_USER_MODEL refers to model '' that has not been installedAUTH_USER_MODEL 指的是尚未安装的模型''
【发布时间】:2019-12-28 16:07:06
【问题描述】:

我有一个 CustomUser 扩展 AbstractUser 如下

class CustomUser(AbstractUser):

    USERTYPE_CHOICES = [(1,"A"),(2,"B"),(3,"C")]
    usertype = models.IntegerField(choices = USERTYPE_CHOICES, default = 1)

我的settings.py 中有以下几行

INSTALLED_APPS = [
...
'login_register_service_hub.apps.LoginRegisterServiceHubConfig',
...
AUTH_USER_MODEL = 'login_register_service_hub.CustomUser'

一切都按预期进行

我正在尝试实现自定义身份验证后端,我通过包含以下内容来做到这一点

from django.contrib.auth.backends import ModelBackend
from django.contrib.auth import get_user_model


#Check for the is_active property
class EmailBackend(ModelBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):
        UserModel = get_user_model()
        try:
            user = UserModel.objects.get(email=username)
        except UserModel.DoesNotExist:
            return None
        else:
            if user.check_password(password):
                return user
        return None


    def get_user(self, user_id):
        UserModel = get_user_model()
        try:
            return UserModel.objects.get(pk=user_id)
        except UserModel.DoesNotExist:
            return None

我用以下内容更新了我的settings.py

AUTHENTICATION_BACKENDS = {'login_register_service_hub.EmailBackend',}

但是一旦我跑了

 python3 manage.py runserver

我收到以下错误

"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 'login_register_service_hub.CustomUser' that has not been installed

有趣的是,只有在我导入 ModelBackend 时命令才会失败(即使我注释掉了 EmailBackend 定义)

【问题讨论】:

  • 您可以尝试删除您的数据库,创建一个新数据库,删除所有迁移,最后进行迁移并再次迁移吗?
  • login_register_service_hub 中有什么内容?我注意到后端是直接从应用程序导入的,模型在models.py 文件中吗?
  • @engin_ipek 我删除了数据库,迁移但运行 makemigrations 失败并出现同样的错误
  • @IainShelvington 以上定义在models.pylogin_register_service_hub
  • 将您的AUTHENTICATION_BACKENDS 设置更改为导入'login_register_service_hub.backend.EmailBackend'

标签: python django


【解决方案1】:

您应该一般不要将东西导入/从应用程序__init__.py。将您的后端移动到login_register_service_hub/backends.py,然后更新您的设置

AUTHENTICATION_BACKENDS = ['login_register_service_hub.backends.EmailBackend']

【讨论】:

    猜你喜欢
    • 2015-01-10
    • 1970-01-01
    • 2021-10-07
    • 2021-07-12
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多