Можно ли использовать одно и то же имя приложения 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 на классы конфигурации приложения или на пакеты приложения.

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