AUTH_USER_MODEL как субприложение пользовательского приложения аутентификации - PullRequest
3 голосов
/ 10 февраля 2020

У меня есть приложение авторизации, которое используется вместо django собственного auth приложения, которое называется authentication. Обычно в проектах указывается AUTH_USER_MODEL = 'authentication.User'.

. Есть некоторые другие проекты, которые используют отдельный бэкэнд аутентификации и API, который добавляет дополнительные поля / методы в модель User.

Поскольку это дополнительные функции используются не во всех проектах. Я бы хотел, чтобы это было дополнительное подпрограмма для authentication. Поэтому я добавил его в настройку пакета как дополнительное;

setup(
    name='authentication',
    extras_require={
        "api_app": ["api_client>=3.0.1"],
    },

api_app затем добавляется в качестве дополнительного приложения к authentication:

- authentication
-- apps.py
-- models.py
-- api_app
--- apps.py
--- models.py

С этим У меня есть две модели для пользователей: User в authentication.models и APIUser в authentication.api_app.models. Для проектов, использующих APIUser, у меня есть следующие настройки:


# AUTH_USER_MODEL = 'authentication.User'
AUTH_USER_MODEL = 'authentication_api.APIUser'  # Needs to be `app_label.Model`


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.humanize',
    'django.contrib.messages',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.staticfiles',

    'authentication',
    'authentication.api_app',
    'api_client'
]

api_app.__init__

default_app_config = 'authentication.api_app.apps.APIConfig'

api_app определяется как;

class APIConfig(AppConfig):
    label = 'authentication_api'  # in an attempt to support `app_label.Model` ref in settings
    name = 'authentication.api_app'
    verbose_name = "API Authentication"

При такой конфигурации django считает, что authentication_api не установлен, но AUTH_USER_MODEL поддерживает только app_label.Model и ничего более сложного, так как я могу настроить это приложение для поддержки модели верхнего уровня или модель подуровня для AUTH_USER_MODEL?

Ошибка, которую я получаю с вышеуказанной настройкой;

django.core.exceptions.ImproperlyConfigured: 
AUTH_USER_MODEL refers to model 'authentication_api.APIUser' that has not been installed
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...