Django project models.py против app models.py

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

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

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

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

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


person nrshapiro    schedule 09.04.2010    source источник


Ответы (3)


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

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

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

person Ludwik Trammer    schedule 09.04.2010
comment
Очень интересный и познавательный разговор! Джеймс также упомянул, что на сайтах worldonline есть только settings.py и urls.py. Остальные - это многоразовые приложения в пути python apache. - person vdboor; 08.08.2010

  • Модель должна быть определена только один раз в проекте Django.

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

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

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

person T. Stone    schedule 09.04.2010

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

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

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

person Łukasz    schedule 09.04.2010