2015-05-04 2 views
0

У меня есть проект с несколькими приложениями и многими моделями данных. Я использую Django 1.7 и Python 2.7.Django 1.7 Не найти новую модель с makemigrations

Я организовал модели в модулях уровня приложения.

- common/ 
    -- models/ 
    --- __init__.py 
    --- these_models.py 
    --- those_models.py 

Я добавил новый файл в этой структуре и команда Джанго makemigration не обнаруживает изменений.

Если я поместил новые модели в существующий файл модели, файлы миграции создаются отлично, все перемещается и работает отлично. Как только я помещаю их в новый файл, Django их не находит. Они не в новом приложении - это существующий модуль app/models/, просто новый файл. Я не import * (ewwww) в __init__.py или что-нибудь еще.

В Django 1.4 мне пришлось использовать app_label, но больше не делайте этого.

Любые мысли? Нужно ли вручную создавать файлы миграции (у меня нет проблем с этим)?

+0

http://stackoverflow.com/questions/5534206/how-do-i-separate-my-models-out-in-django – Othman

+0

Это не касается моего вопроса, поскольку я использую Django 1.7. Кроме того, я упомянул в своем вопросе, что это не имеет значения. Вы прочитали мой вопрос? – Rico

+0

Вы должны импортировать свои модели в '__init __. Py' внутри' models'. Никто не говорит вам использовать '*'. – snahor

ответ

4

Джанго ли теперь поддерживает модели в подпапках без необходимости указывать Meta class и app_label, но он по-прежнему питона и не магически загружать все модули в папке models.

Вам по-прежнему необходимо импортировать свои модели в ваш app/models/__init__.py.

+0

Это неправда. Мой проект содержит около 8 модельных модулей с около 2 дюжинами файлов моделей по всем модулям. Ни один из них не импортируется в 'app/models/__ init __. Py'. Мы просто ссылаемся на все наши модели как 'from app.models.these_models import SomeModel'. Кажется, что Django справляется с этой парадигмой. (кроме этого варианта использования) – Rico

+2

@ Rico в этом случае вам «повезет» по факту наличия импорта для этих моделей. Если есть период времени, модель в одном из этих файлов не импортируется модулем, автоматически импортированным django, 'makemigrations' не сможет увидеть модели и удалить их. Звучит немного опасно! Это также проблема с тем, почему ваши новые модели не подхватываются макемиграциями. Ничто не импортирует их. Это зависимость, которую никто не ожидал бы (удаление импорта не должно приводить к серьезным изменениям в работе приложения), и я рекомендую импортировать в '__init __. Py', где django ожидает их найти –