2016-09-18 2 views
2

я следующая структура проекта:Джанго миграции в подпапках

bm_app_1 
| contents here 
bm_app_2 
| contents here 
bm_common 
| __init__.py 
| deletable 
| | __init__.py 
| | behaviors.py 
| | models.py 
| timestampable 
| | __init__.py 
| | behaviors.py 

Файлы в приложении bm_common определить управляемые модели, что я хочу в миграции файлов. Однако, когда я запускаю , файлы внутри подпапок приложения bm_common не учитываются. Все приложения находятся в INSTALLED_APPS

PREREQ_APPS = [ 
    required apps here 
] 
PROJECT_APPS = [ 
    'bm_common', 
    'bm_app_1', 
    'bm_app_2' 
] 
INSTALLED_APPS = PREREQ_APPS + PROJECT_APPS 

Есть ли способ изменить поведение makemigrations смотреть в подпапки, а? Если нет, что было бы хорошим предложением сделать этот раскол? Я не хочу иметь все поведение в одном behaviors.py, потому что он становится слишком большим и вызывает круговые ссылки для меня.

ответ

2

Модели должны быть импортированы каким-то образом, когда реестр приложений заполняет все модели, в противном случае они не зарегистрированы, и Django не знает о них. Самое простое решение - создать файл bm_common/models.py и импортировать все модели:

from .deletable.models import ModelA, ModelB 
from .timestampable.models import ModelC 
... 
+0

Это работает. Он по-прежнему кажется немного обходным, так как теперь у меня есть файл с «неиспользуемым импортом». – physicalattraction

+0

В этой структуре проекта, без дальнейшей настройки, я все еще получаю ошибки с именами таблиц. При создании таблицы Django принимает имя «bm_common_deletedrecord», но при использовании этой таблицы Django берет имя 'deletable_deletedrecord'. – physicalattraction

+0

^Что решается путем предоставления полного пути при выполнении оператора импорта. – physicalattraction

Смежные вопросы