У меня есть структура проекта, аналогичная приведенной ниже.
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
INSTALLED_APPS=[
...
"items.purchases",
"items.sales",
...
"tools.purchases",
"tools.sales",
...
]
Я получаю следующие исключения
django.core.exceptions.ImproperlyConfigured: Application labels aren't unique, duplicates: purchases
from django.apps import AppConfig
class PurchasesConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'items.purchases'
from django.apps import AppConfig
class PurchasesConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'tools.purchases'
Можно ли использовать одно и то же имя приложения Django в нескольких местах проекта или лучше переименовать их, чтобы предотвратить конфликты? Кроме того, считается ли хорошей практикой добавлять к именам приложений завершающее подчеркивание, чтобы различать конфликтующие имена?
Спасибо @raphael. Это помогло мне. В итоге я переопределил ярлыки приложений. Никаких серьезных проблем пока нет.
Документы показывают, что это не очень хорошая практика. Там говорится:
Имена и метки приложений должны быть уникальными в INSTALLED_APPS.
Имена приложений (точечный путь Python к пакету приложения) должны быть уникальными. Невозможно включить одно и то же приложение дважды, за исключением дублирования его кода под другим именем.
Метки приложений — по умолчанию последняя часть имени — также должны быть уникальными. Например, вы не можете использовать одновременно django.contrib.auth
и myproject.auth
. Однако вы можете переименовать приложение, используя пользовательскую конфигурацию, определяющую другую метку.
Эти правила применяются независимо от того, ссылается ли INSTALLED_APPS на классы конфигурации приложения или пакеты приложений.
В итоге я пометил дубликат приложения.
Сначала я не понял ваш вопрос, несмотря на то, что он хорошо написан, но думаю, решение проблемы можно найти здесь.