Я изучаю Django, и я пытаюсь понять использование models.py в проекте по сравнению с приложением. Кажется от учебных примеров, что я включаю образцовое определение в приложение, но когда я пошел для применения того знания к моей собственной существующей базе данных, я застрял.
Я взял базу данных, что я использую (копия, конечно) и генерировал концептуальную схему как django модель с помощью inspectdb. Я сделал это на уровне проекта и предположил затем, что я мог записать приложения с помощью подсхем в приложениях для того проекта.
Но обобщая учебное руководство, они определяют модель в model.py приложения. Если бы я сделал это, то я повторил бы модель (или часть его), это уже на уровне проекта, который походит на ошибку и проблему обслуживания.
Таким образом, как, в стиле Django, я использую схему проекта (или части его), не переопределяя его в models.py приложения?
Заранее спасибо.
Не должно быть никаких причин для создания «моделей уровня проекта» (или « представления на уровне проекта "в этом отношении). Вам просто нужно разделить функциональность на отдельные приложения.
Допустим, вы разрабатываете интранет-сайт для школы. У вас будет одно приложение, которое работает с учетными записями студентов, другое приложение, генерирующее расписания, и еще одно для внутренней доски объявлений и т. Д. Каждое приложение определяет свои собственные модели (нет «моделей уровня проекта»), но приложения могут импортировать модели друг друга (так что в сообщениях доски объявлений может быть поле ForeignKey, указывающее на студента из приложения «студенты»).
См. Также презентацию Джеймса Беннета «Написание многоразовых приложений Django» из DjangoCon 2008.
Модель должна быть определена только один раз в проекте Django
Модель должна существовать в приложении в рамках проекта
Вы можете получить доступ к другим модели приложения путем их импорта
Если вам нужно «добавить» к существующей модели, ее можно унаследовать от (см .: наследование нескольких таблиц ). Это довольно просто, но если вы только начинаете, вы можете оставить это на потом.
Модели Django могут находиться только в приложениях, а не в самом проекте. По умолчанию manage.py inspectdb
выводит содержимое файла models.py
, и вы должны поместить его в нужное место.
В вашем случае было бы проще поместить все в одно приложение, а затем разбить его в тех местах, где это будет иметь смысл.
Я не уверен, в каком состоянии находится текущая версия, но до появления модуля models
в пакете указывалось, что это приложение django и его можно поместить в список INSTALLED_APPS
.