#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. Бинго. Спасибо.