Проект Django models.py по сравнению с приложением models.py

Я изучаю Django, и я пытаюсь понять использование models.py в проекте по сравнению с приложением. Кажется от учебных примеров, что я включаю образцовое определение в приложение, но когда я пошел для применения того знания к моей собственной существующей базе данных, я застрял.

Я взял базу данных, что я использую (копия, конечно) и генерировал концептуальную схему как django модель с помощью inspectdb. Я сделал это на уровне проекта и предположил затем, что я мог записать приложения с помощью подсхем в приложениях для того проекта.

Но обобщая учебное руководство, они определяют модель в model.py приложения. Если бы я сделал это, то я повторил бы модель (или часть его), это уже на уровне проекта, который походит на ошибку и проблему обслуживания.

Таким образом, как, в стиле Django, я использую схему проекта (или части его), не переопределяя его в models.py приложения?

Заранее спасибо.

12
задан nrshapiro 9 April 2010 в 20:35
поделиться

3 ответа

Не должно быть никаких причин для создания «моделей уровня проекта» (или « представления на уровне проекта "в этом отношении). Вам просто нужно разделить функциональность на отдельные приложения.

Допустим, вы разрабатываете интранет-сайт для школы. У вас будет одно приложение, которое работает с учетными записями студентов, другое приложение, генерирующее расписания, и еще одно для внутренней доски объявлений и т. Д. Каждое приложение определяет свои собственные модели (нет «моделей уровня проекта»), но приложения могут импортировать модели друг друга (так что в сообщениях доски объявлений может быть поле ForeignKey, указывающее на студента из приложения «студенты»).

См. Также презентацию Джеймса Беннета «Написание многоразовых приложений Django» из DjangoCon 2008.

23
ответ дан 2 December 2019 в 04:42
поделиться
  • Модель должна быть определена только один раз в проекте Django

  • Модель должна существовать в приложении в рамках проекта

  • Вы можете получить доступ к другим модели приложения путем их импорта

  • Если вам нужно «добавить» к существующей модели, ее можно унаследовать от (см .: наследование нескольких таблиц ). Это довольно просто, но если вы только начинаете, вы можете оставить это на потом.

5
ответ дан 2 December 2019 в 04:42
поделиться

Модели Django могут находиться только в приложениях, а не в самом проекте. По умолчанию manage.py inspectdb выводит содержимое файла models.py , и вы должны поместить его в нужное место.

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

Я не уверен, в каком состоянии находится текущая версия, но до появления модуля models в пакете указывалось, что это приложение django и его можно поместить в список INSTALLED_APPS .

4
ответ дан 2 December 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: