Сплит модели и формы в структуре подпапок Django 2.0+ - PullRequest
0 голосов
/ 03 июля 2019

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

project/
--------app_name/
-----------------forms/
-----------------------__init__.py
-----------------------a.py
-----------------------b_folder/
--------------------------------__init__.py
--------------------------------b1.py
--------------------------------b2.py
-----------------models/
-----------------------__init__.py
-----------------------a.py
-----------------------b_folder/
--------------------------------__init__.py
--------------------------------b1.py
--------------------------------b2.py

Разделение приложения на разные приложения в данном конкретном случае не имеет смысла.

На данный момент все вписывается в models.py и forms.py, но каждая из них содержит около 10 тыс. Строк.

Идея состоит в том, чтобы иметь возможность разделить эти монолиты на маленькие объекты, чтобы упростить поддержку кода всего проекта.

Для деталей моделей это работает: я смог запустить сервер без ошибок.

Это вызывает сбой, когда я применяю тот же метод к формам.

Вот содержание __init__.py

формы / __ __ INIT. Ру

from .a import *
from .b_folder import *

форма / b_folder / __ __ INIT. Р

from .b1 import *
from .b2 import *

модели / __ __ INIT. Ру

from .a import *
from .b_folder import *

Модель / b_folder / __ __ INIT. Р

from .b1 import *
from .b2 import *

Теперь, как импортировать следующее?

форма / b_folder_b1.py

#how to import the model a or b1?
from app_name.models import AModel, BOneModel

Я получаю следующую ошибку:

ImportError: cannot import name 'BOneModel' from 'app_name.models' (/project/app_name/models/__init__.py)

EDIT: Ошибка, кажется, опечатка в моем коде. Этот способ является правильным способом заставить его работать, и, похоже, он совсем не мешает миграции.

Так что мой вопрос развивается немного:

Это «хороший» шаблон дизайна, чтобы сделать это таким образом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...