Использование моделей Django в разных приложениях? - PullRequest
16 голосов
/ 13 января 2010

Итак, в моем проекте Django у меня есть несколько разных приложений, каждое со своими моделями, представлениями, шаблонами и т. Д. Каков хороший способ (способ "Django") для взаимодействия этих приложений?

Конкретным примером будет приложение Meetings, в котором есть модель для Meetings, и у меня есть домашнее приложение, в котором я хочу отобразить топ-5 Meetings на домашней странице.

Должно ли представление Home App просто запрашивать модель приложения Meetings?

Такое ощущение, что это пересекает какую-то линию, и в Django может быть более не связанный способ делать такие вещи.

Ответы [ 6 ]

17 голосов
/ 13 января 2010

В какой-то момент ваши приложения будут соединяться, чтобы выполнить любую работу. Вы не можете обойти это.

3 голосов
/ 13 января 2010

Чтобы добиться максимально возможной развязки,

У вас должно быть приложение для конкретного проекта, которое все связывает между собой.

Использование сигналов от моделей для создания новых моделей в отделенных приложениях помогает. Но делать это слишком глупо.

1 голос
/ 26 января 2012

Для вашего конкретного примера я бы использовал Django templatetag .

Наличие тега шаблона "display_top_meetings" в приложении Meetings и вызов его с помощью {{ display_top_meetings 5 }} из шаблона индекса, загрузка его первой.

Подробнее о тегах-шаблонах вы можете прочитать здесь:

Django Официальная документация о TemplateTags

Статья B-List о написании «лучших тегов шаблонов»

Надеюсь, это поможет!

1 голос
/ 13 января 2010

Если бы это был я, я бы сделал тег шаблона в вашем приложении для собраний, который выдает желаемый результат, и включил бы этот шаблон в шаблон домашнего приложения.

Таким образом, вы соединяете их только в части просмотра MVC и упрощаете обслуживание, если вы изменяете свои модели в приложении для собраний.

1 голос
/ 13 января 2010

Должно ли представление Home App просто запрашивать модель приложения Meetings?

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

Написание тесно связанных приложений Django действительно легко, а написание разорванных приложений Django действительно сложно. Не разъединяйте, если у вас нет причин, и вы сэкономите много работы (и счастья!).

0 голосов
/ 13 января 2010

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

Проекты не должны делиться моделями

...