2009-05-13 1 views
37

Я начал работу над локальным приложением для себя, которое проходит через браузер. Недавно просмотрев учебник django, я думаю, что лучше использовать django, а не просто python.Около 20 моделей в 1 приложении django

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

models are all related, поэтому я не могу просто сделать их в отдельных приложениях, не так ли?

ответ

30

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

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

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

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

+1

Но если модели должны относиться друг к другу, как я могу поместить их в отдельные приложения? – Teifion

+2

Одна модель может легко ссылаться на модели в другой упаковке. У вас почти всегда есть модели «более высокого уровня» и «нижнего уровня». Внедрение моделей нижнего уровня в одном приложении. Приложения более высокого уровня могут зависеть от моделей приложений нижнего уровня. –

+13

Каждый раз, когда вы настраиваете внешний ключ для модели пользователя в django.contrib.auth, вы связываетесь между отдельными приложениями ... –

0

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

0

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

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

+0

Как сказал Джаррет Харди, создание пакета python (то есть каталога с файлом __init__.py в нем), называемым моделями, было бы лучшим способом сделать это. –

69

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

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

/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 и дб синхронизации будет найти:

from person import Person 

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

+0

Это теоретически работает, но работает строка из учебника «python manage.py sql gui» ничего не делает, любая идея, что случилось? – Teifion

+1

Это обычно означает, что django не может найти модели. Убедитесь, что у вас есть импорт в файле models.__init__.py, и вы установили app_label для каждой модели. Также убедитесь, что вы удалили старый файл models.py. –

+11

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

16

модели все связано с тем, что я cant's просто делаю их в отдельных приложениях могу ли я?

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

+14

+1. Нет закона против приложений в зависимости друг от друга. – muhuk

5

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

Цель приложения Django состоит в том, чтобы иметь небольшую цельную часть кода, которая идеально сочетается с nicelly.

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

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

Статья Django tips: laying out an application может вам помочь. Как всегда, возьмите все, что вы читаете, с солью (включая этот ответ).

 Смежные вопросы

  • Нет связанных вопросов^_^