Можно ли использовать одно и то же имя приложения Django в нескольких местах проекта?
У меня похожая структура проекта, как показано ниже.
project_name/
│
├── apps/
│ ├── items/
│ │ ├── purchases/
│ │ │ ├── migrations/
│ │ │ ├── templates/
│ │ │ ├── __init__.py
│ │ │ ├── admin.py
│ │ │ ├── apps.py
│ │ │ ├── models.py
│ │ │ ├── tests.py
│ │ │ └── views.py
│ │ │
│ │ └── sales/
│ │ ├── migrations/
│ │ ├── templates/
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── models.py
│ │ ├── tests.py
│ │ └── views.py
│ │
│ └── tools/
│ ├── purchases/
│ │ ├── migrations/
│ │ ├── templates/
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── models.py
│ │ ├── tests.py
│ │ └── views.py
│ │
│ └── sales/
│ ├── migrations/
│ ├── templates/
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
│
├── project_name/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
│
└── manage.py
settings
INSTALLED_APPS=[
...
"items.purchases",
"items.sales",
...
"tools.purchases",
"tools.sales",
...
]
Я получаю следующие исключения
django.core.exceptions.ImproperlyConfigured: Application labels aren't unique, duplicates: purchases
items/purchases/apps.py
from django.apps import AppConfig
class PurchasesConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'items.purchases'
tools/purchases/apps.py
from django.apps import AppConfig
class PurchasesConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'tools.purchases'
Можно ли использовать одно и то же имя приложения Django в нескольких местах в проекте, или лучше переименовать их, чтобы избежать конфликтов? Кроме того, считается ли хорошей практикой добавлять к именам приложений нижнее подчеркивание, чтобы различать конфликтующие имена?
В docs показано, что это не лучшая практика. Там говорится:
Имена и ярлыки приложений должны быть уникальными в INSTALLED_APPS
Имена приложений - точечный Python-путь к пакету приложения - должны быть уникальными. Невозможно включить одно и то же приложение дважды, если только не продублировать его код под другим именем.
Метки приложений - по умолчанию последняя часть имени - также должны быть уникальными. Например, вы не можете включить django.contrib.auth
и myproject.auth
. Однако вы можете изменить метку приложения с помощью пользовательской конфигурации, определяющей другую метку.
Эти правила применяются независимо от того, ссылается ли INSTALLED_APPS на классы конфигурации приложения или на пакеты приложения.