Неправильно настроенный Django: метки приложений не уникальны

#django

Вопрос:

Вопрос

Как мне настроить свое приложение и правильно пометить его, чтобы я не столкнулся с Application labels aren't unique ошибкой и чтобы оно работало?

Я понимаю, что могу переименовать auth. Я не хочу переименовывать auth.

settings.py

 INSTALLED_APPS = [
   ...,
   "core.auth",
   ...
]
 
 $ python manage.py shell_plus
 

ВОЗВРАТ

 Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    main()
  File "manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/Users/stackoverflow/dev/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/Users/stackoverflow/dev/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 395, in execute
    django.setup()
  File "/Users/stackoverflow/dev/venv/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/Users/stackoverflow/dev/venv/lib/python3.7/site-packages/django/apps/registry.py", line 95, in populate
    "duplicates: %s" % app_config.label)
django.core.exceptions.ImproperlyConfigured: Application labels aren't unique, duplicates: auth
 

Я добавил следующее:

core/auth/init.py

 default_app_config = 'core.auth.AuthConfig'
 

core/auth/apps.py

 from django.apps import AppConfig


class AuthConfig(AppConfig):
    name = "core_auth"
    label = "core_auth"
    verbose_name = "Core Auth"
 
 $ python manage.py shell_plus
 
 Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    main()
  File "manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/Users/stackoverflow/dev/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/Users/stackoverflow/dev/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 395, in execute
    django.setup()
  File "/Users/stackoverflow/dev/venv/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/Users/stackoverflow/dev/venv/lib/python3.7/site-packages/django/apps/registry.py", line 91, in populate
    app_config = AppConfig.create(entry)
  File "/Users/stackoverflow/dev/venv/lib/python3.7/site-packages/django/apps/config.py", line 228, in create
    if not issubclass(app_config_class, AppConfig):
TypeError: issubclass() arg 1 must be a class
 

Ответ №1:

Приложение name и приложение label — это разные вещи. Прямая цитата из документации:

Это то AppConfig.name , что:

Полный путь Python к приложению

и AppConfig.label является ли

Краткое название приложения

Кроме того, также говорится о label том, что

Этот атрибут позволяет повторно маркировать приложение, если два приложения имеют конфликтующие метки

Следовательно, вы хотите только изменить label и не изменять name :

 from django.apps import AppConfig


class AuthConfig(AppConfig):
    name = "core.auth" # I assume it was this according to your shown INSTALLED_APPS, if not it should be what it originally was
    label = "core_auth"
    verbose_name = "Core Auth"
 

Также я считаю, что вместо default_app_config = 'core.auth.AuthConfig' этого должно быть default_app_config = 'core.auth.apps.AuthConfig' , так как вы заявляете AuthConfig в apps.py файле.

Комментарии:

1. Не настройка name не помогает.

2. @Vishal также является core.auth строкой в вашей INSTALLED_APPS настройке? Кажется, вам не хватает цитат?

3. @Vishal Также default_app_config = 'core.auth.AuthConfig' это кажется неправильным? Разве не должно быть default_app_config = 'core.auth.apps.AuthConfig' так, как вы заявляете об этом в apps.py файле?

4. Бинго. Спасибо.