Проект Django models.py против приложения models.py - PullRequest
12 голосов
/ 10 апреля 2010

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

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

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

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

приложения?

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

Ответы [ 3 ]

22 голосов
/ 10 апреля 2010

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

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

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

5 голосов
/ 10 апреля 2010
  • Модель должна быть определена только один раз в проекте Django

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

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

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

3 голосов
/ 10 апреля 2010

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

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

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

...