Переименуйте мое приложение Django auth, чтобы исправить ошибку "Application labels are not unique".

Когда я создавал свой проект Django, я создал приложение под названием auth. Я никогда не использовал django.contrib.auth, вместо этого я создал свой собственный код аутентификации. Модель User без полей password, пользовательские представления и сериализации API, вход по волшебным ссылкам, отправленным на электронную почту, и т. д. Я не использовал Django Admin, поэтому мне никогда не требовалась auth реализация Django.

Теперь я хочу добавить Django Admin в свой проект, и для этого мне нужно добавить django.contrib.auth, и теперь я сталкиваюсь с большими проблемами из-за ошибки django.core.exceptions.ImproperlyConfigured: Application labels aren't unique, duplicates: auth.

Переименование моего собственного приложения auth не представляется возможным. Я пытался изменить label в его AppConfig, но существующие миграции ломаются разными забавными и странными способами. Поэтому я решил импортировать приложение auth от Django с пользовательским ярлыком, например, так:

# djangoauth.py
from django.apps import AppConfig


class DjangoAuthConfig(AppConfig):
    name = "django.contrib.auth"
    label = "django_auth"

А затем я добавил djangoauth.DjangoAuthConfig к INSTALLED_APPS. Но это тоже не работает, поскольку в приложении Django auth есть миграции с жестко закодированным именем auth, поэтому изменение ярлыка приложения теперь ломает эти миграции.

Я не знаю, как решить эту проблему. Мне бы очень хотелось, чтобы Django справлялся с дублированием имен приложений (просто префикс одного из них, например django_contrib_auth), но это не так. Так как же мне переименовать одно из этих auth приложений, чтобы я мог использовать их оба? Без риска потерять существующие данные auth? У моего приложения много пользователей, и я действительно не могу допустить, чтобы эта таблица была удалена/восстановлена.

Да, я видел Как изменить имя приложения Django?, но это ответ от 2011 года, и я очень надеюсь, что с тех пор ситуация улучшилась 😬

Вернуться на верх