У меня есть проект с такой структурой:
.
├── app
│ ├── data
│ │ ├── ...
│ │ └── orm
│ │ ├── app_1
│ │ ├── app_2
│ │ ├── ...
│ │ └── orm
│ │ ├── ...
│ │ └── settings.py
│ └── ...
├── ...
└── main.py
Я хочу использовать django orm в своем проекте, но я хочу иметь простой способ изменить Django ORM на любой другой ORM. Соответственно, я хочу изолировать django проект внутри моего основного проекта.
У меня есть класс app.data...DataController
, который использует модели в любых случаях. И код в main.py
использует DataController
для получения или загрузки данных из БД, другой код работает уже с данными, но не с моделями напрямую.
Для достижения этого я написал этот код в app.data.__init__.py
:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app.data.orm.orm.settings")
import django
from django.conf import settings
django.setup()
Также, если я вставлю этот код куда-нибудь еще, например, в main.py
, это не работает, django говорит ImproperlyConfigured: Requested setting INSTALLED_APPS
.
А потом в settings.py
я был измените пунктирные пути на подобные приложения 'app_1'
-> 'app.data.orm.app_1'
. Но сейчас я не могу использовать django -команды из manage.py
не из каталога root проекта или из app/data/orm
. Во-первых, каталог проекта root отсутствует в sys.path, во-вторых, если я добавлю его, я получу RuntimeError: populate() isn't reentrant
исключение.
Есть ли способ сделать то, что я хочу или чего мне не хватает?
обн.
Хорошо, я сделал так, как я описал в начале, но выглядит ужасно - я переместил manage.py
в проект root, код с django.setup ()
лежит где-то в середине проекта Мне пришлось его отредактировать manage.py
, таким образом os.environ.setdefault ('DJANGO_SETTINGS_MODULE', 'app.data.orm.orm.settings')
.
Есть ли более красивый способ организовать проект, в котором вам нужно использовать стороннюю Django ORM?