Около 20 моделей в 1 приложении Django - PullRequest
37 голосов
/ 13 мая 2009

Я начал работу над локальным приложением для себя, которое запускается через браузер. После недавнего изучения учебника по django, я думаю, что было бы лучше использовать django, а не просто python.

Есть одна проблема: у меня есть как минимум 20 моделей, и у каждой будет много функций. Проще говоря, он собирается создать один огромный файл моделей и, вероятно, также огромные представления. Как мне их разделить?

Все модели связаны , поэтому я не могу просто превратить их в отдельные приложения?

Ответы [ 6 ]

71 голосов
/ 13 мая 2009

Это довольно распространенная потребность ... Я не могу представить, как пробираться через файл models.py длиной 10 000 строк: -)

Вы можете разбить файл models.py (и тоже views.py) на пакет. В этом случае дерево вашего проекта будет выглядеть так:

/my_proj
    /myapp
        /models
            __init__.py
            person.py

Файл __init__.py превращает папку в пакет. Единственное, что нужно, - это обязательно определить внутренний класс Meta для ваших моделей, который указывает app_label для модели, иначе у Django возникнут проблемы при построении вашей схемы:

class Person(models.Model):
    name = models.CharField(max_length=128)

    class Meta:
        app_label = 'myapp'

Как только это будет сделано, импортируйте модель в ваш файл __init__.py, чтобы Django и sync db нашли ее:

from person import Person

Таким образом, вы все еще можете сделать from myapp.models import Person

31 голосов
/ 13 мая 2009

«У меня есть как минимум 20 моделей» - это, вероятно, более одного «приложения» Django и больше похоже на «проект» Django с несколькими небольшими «приложениями»

Мне нравится разделять вещи по темам или предметным областям, которые имеют несколько (от 1 до 5) моделей. Это становится «приложением» Django - и является полезной единицей повторного использования.

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

Это также помогает в управлении проектами, поскольку каждое «приложение» может стать спринтом с выпуском в конце.

16 голосов
/ 13 мая 2009

Все модели связаны, поэтому я не могу просто превратить их в отдельные приложения можно я?

Вы можете разделить их на отдельные приложения. Чтобы использовать модель в одном приложении из другого приложения, вы просто импортируете ее так же, как импортировали бы приложения django.contrib.

5 голосов
/ 14 января 2010

Наличие 20 моделей в одном приложении может быть признаком того, что вы должны разбить его на более мелкие.

Цель приложения Django - создать небольшой фрагмент кода, который отлично сочетается друг с другом.

Итак, если у вас был сайт электронной коммерции, у вас может быть приложение shopping_cart, приложение для выставления счетов и т. Д.

Имейте в виду, что в приложениях действительно нет проблем в зависимости друг от друга (хотя всегда лучше, если их можно отделить), но приложение не должно выполнять две совершенно разные вещи.

Статья Советы Django: выкладывание приложения может помочь вам. Как всегда, возьмите все, что вы прочитали, с крошкой соли (включая этот ответ).

0 голосов
/ 13 мая 2009

Вы можете разделить их на отдельные файлы и просто импортировать в начало вашего основного поля models.py.

Действительно ли вы хотите - это другой вопрос.

0 голосов
/ 13 мая 2009

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

...