Это хорошая практика программирования, чтобы отделить модели от остальной части приложения - PullRequest
6 голосов
/ 12 января 2012

Мой проект состоит из нескольких приложений django, которые необходимо развертывать по-разному, возможно, на разных машинах. Однако часто этим приложениям иногда требуется доступ к моделям друг друга, поэтому я подумал об «экстернализации» моих моделей, чтобы к ним можно было более элегантно обращаться из любого приложения. Поэтому идея состоит в том, чтобы иметь структуру каталогов, напоминающую что-то вроде этого:

/ 
+ application1
+ application2
+ models

Есть ли функциональный смысл в этом (кроме возможности сопровождения кода), поскольку приложения могут ссылаться друг на друга?

Ответы [ 3 ]

4 голосов
/ 12 января 2012

Следующий абзац в книге django заставляет меня думать, что это, вероятно, не очень хорошая идея (я добавил жирное форматирование):

Однако есть одно требование в отношенииСоглашение приложения: если вы используете слой (модели) базы данных Django, вы должны создать приложение Django. Модели должны жить в приложениях .Таким образом, чтобы начать писать наши модели, нам нужно создать новое приложение.

3 голосов
/ 12 января 2012

Следующее не очень хорошо вписывается в комментарии к ответу @ jcollado, поэтому я выложу его здесь:

https://docs.djangoproject.com/en/dev/topics/db/models/#models-across-files

Модели в файлах

Совершенно нормально связывать модель с приложением из другого. Для этого импортируйте связанную модель вверху модели, в которой находится ваша модель. Затем просто обратитесь к другому классу модели, где это необходимо. Например:

from geography.models import ZipCode

class Restaurant(models.Model):
    # ...
    zip_code = models.ForeignKey(ZipCode)
2 голосов
/ 12 января 2012

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

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

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