Подтвердить что ты не робот

Под-приложения Django и структура модуля

Я разрабатываю приложение Django, которое представляет собой большую систему, которая требует, чтобы несколько под-приложений сохраняли чистоту. Поэтому у меня есть каталог верхнего уровня, который является приложением Django (поскольку он имеет пустой файл models.py) и несколько подкаталогов, которые также являются приложениями сами по себе.

Причина, по которой я выложил приложение таким образом, заключается в том, что суб-приложения разделены, но они никогда не будут использоваться самостоятельно, вне родительского приложения. Поэтому нет смысла распространять их отдельно.

При установке моего приложения файл настроек должен содержать следующее:

INSTALLED_APPS = (
    ...
    'myapp',
    'myapp.subapp1',
    'myapp.subapp2',
    ...
)

... который явно субоптимален. Это также имеет слегка неприятный результат, требуя, чтобы все подзапросы ссылались на их "внутреннее" имя (т.е. subapp1, subapp2 и т.д.). Например, если я хочу reset таблицы базы данных для subapp1, я должен ввести:

python manage.py reset subapp1

Это раздражает, особенно потому, что у меня есть суб-приложение под названием core - которое может конфликтовать с другим именем приложения, когда мое приложение установлено в пользовательском проекте.

Неужели я делаю это совершенно неправильно или не могу заставить эти "внутренние" приложения ссылаться на их полное имя?

4b9b3361

Ответ 1

Вы делаете это правильно, так как сам django делает это именно так. Например, приложение администратора зарегистрировано в INSTALLED_APPS как django.contrib.admin, но для reset оно должно использоваться manage.py reset admin, и действительно, manage.py reset django.contrib.admin не работает.

Это можно рассматривать как ошибку в django...

Однако вы не должны беспокоиться о конфликтах имен, потому что вы всегда должны запускать django внутри среды virtualenv, изолированной от остальной части установки python. Это чрезвычайно мощное и гибкое решение, чем запуск django на обычной установке python. Более подробная информация, например, здесь: http://mathematism.com/2009/jul/30/presentation-pip-and-virtualenv/