python - AUTH_USER_MODEL 指的是尚未安装的型号 '%s'”

标签 python django

我在模型中使用 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() 行,那么我可以运行服务器,但是从管理后端创建的 super 用户无法登录。 如果我使用 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 - 您的 settings.py 中的已安装应用列表中是否有该应用?

2 - 是否在 settings.py 中设置了 AUTH_USER_MODEL = "app_name_from_apps_py.model_name"

就我阅读的大多数其他回复而言。

我在阅读文档时没有意识到要使用 get_user_model() 您需要先建立您的模型。当然,对吧?!

因此,在 OP 使用 get_user_model() 的地方,他们创建了一个循环依赖。 您不能在创建此模型的类中使用 get_user_model()

关于python - AUTH_USER_MODEL 指的是尚未安装的型号 '%s'”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51349736/

相关文章:

python - xml.etree.ElementTree 未找到 XML 中的所有元素

Python神经网络不训练

python - 注释字段上的 django-filter 过滤器

python - 使用 webassets 混合 css 和 less

python - Django channel 和 azure

javascript - 如何通过模板将 xml block 从 Django 数据库传递到 javascript?

python - Google App Engine - NeedIndexError : no matching index found

python - 如何更改 Pandas 数据帧图上的 Y 轴

django - 如何在 django REST 中禁用 IE11 缓存

python - 在发出 HTTP 请求时在 python 中保持 session