Совместное использование моделей между приложениями Django - PullRequest
31 голосов
/ 09 ноября 2010

Буду краток: чтобы работать в духе и идее приложения Django, нормально ли приложению импортировать модели из другого приложения? Скажем, приложение статистики пользователя будет импортировать модели из приложения пользователя примерно так: from users.models import users

Ответы [ 4 ]

29 голосов
/ 09 ноября 2010

Ответ - да.Для одного приложения внутри вашего проекта django вполне нормально импортировать модели из другого приложения.Сила проекта django заключается в приложениях и их взаимодействиях.

Также убедитесь, что у вас есть служебные приложения, которые импортируют модели из более общих приложений, а не наоборот.Поэтому приложение «userstatistics» должно импортировать модели из приложения «users», но приложение «users» не должно полагаться на «userstatistics».

Если ваше приложение импортирует модели из стороннего приложения (скажем, django-поршень), обязательно укажите это в файле требований.

22 голосов
/ 09 ноября 2010

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

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

Если вы создаете приложение для публичного выпуска, постарайтесь сохранить его самостоятельным (и зависимым от django-internals, т. Е., По возможности, использовать то, что предоставляет django). Если вам действительно нужно стороннее приложение для работы или если стороннее приложение сделает ваш код более управляемым, то обязательно включите зависимости, но вдвойне обязательно документируйте все требования и необходимые настройки.

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

Мне, однако, приходится сомневаться в целесообразности создания вашей собственной User модели, которая имеет то же имя, что и встроенная в django auth.User.

1 голос
/ 09 ноября 2010

Вы можете попробовать лучше расширение модели Django User с наследованием .Вы будете использовать пользователя django с добавленным настраиваемым полем, поэтому у вас будет один и тот же пользователь для всех приложений.

0 голосов
/ 09 ноября 2010

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

...