Главная | Архив новостей | Общение | Площадка | Примеры OpenID
Хостинг Django от «Джино»
Оглавление

Установка модели

Мы написали код. Давайте создадим таблицы в нашей базе данных. Чтобы это сделать мы должны активировать модели в нашем проекте. Это делается с помощью добавления приложения books к списку установленных приложений в файле параметров.

Откройте файл settings.py снова и посмотрите на параметр INSTALLED_APPS. Этот параметр указывает Django какие приложения активированы для текущего проекта. По умолчанию, параметр выглядит так:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
)

Временно закомментируйте все четыре строки с помощью символа #. (Эти приложения были активированы для удобства, но мы самостоятельно активируем и обсудим их позже.) Не закрывая файл, измените параметры MIDDLEWARE_CLASSES и TEMPLATE_CONTEXT_PROCESSORS. Эти параметры зависели от приложений, которые мы закомментировали. Теперь добавьте mysite.books в список INSTALLED_APPS:

MIDDLEWARE_CLASSES = (
#    'django.middleware.common.CommonMiddleware',
#    'django.contrib.sessions.middleware.SessionMiddleware',
#    'django.contrib.auth.middleware.AuthenticationMiddleware',
)

INSTALLED_APPS = (
    #'django.contrib.auth',
    #'django.contrib.contenttypes',
    #'django.contrib.sessions',
    #'django.contrib.sites',
    'mysite.books',
)

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

Элемент mysite.books ссылается на приложение books, над которым мы работаем. Каждое приложение, перечисленное в INSTALLED_APPS, представлено полным путём к нему — он, путь к пакетам, разделён точками.

После того как приложение было активировано в файле конфигурации проекта, мы можем создать таблицы в нашей базе данных. Сначала, давайте проверим модели с помощью команды:

python manage.py validate

Команда validate проверяет корректность синтаксиса и логики моделей. Если всё в порядке, вы увидите сообщение «0 errors found». Если нет, удостоверьтесь, что вы корректно набрали код модели. Вывод ошибки должен дать вам полезную информацию об ошибке в коде.

Каждый раз когда вам кажется, что есть проблемы с вашими моделями, используйте команду python manage.py validate. Она поможет выявить все стандартные проблемы.

Если ваши модели не имеют ошибок, выполните следующую команду, чтобы Django сгенерировало операторы CREATE TABLE для моделей приложения books (с полной подсветкой синтаксиса, если вы используете Unix):

python manage.py sqlall books

В данной команде books является именем приложения. Это имя вы указывали при выполнении команды manage.py startapp. После запуска команды вы должны увидеть нечто подобное:

BEGIN;
CREATE TABLE "books_publisher" (
    "id" serial NOT NULL PRIMARY KEY,
    "name" varchar(30) NOT NULL,
    "address" varchar(50) NOT NULL,
    "city" varchar(60) NOT NULL,
    "state_province" varchar(30) NOT NULL,
    "country" varchar(50) NOT NULL,
    "website" varchar(200) NOT NULL
);
CREATE TABLE "books_book" (
    "id" serial NOT NULL PRIMARY KEY,
    "title" varchar(100) NOT NULL,
    "publisher_id" integer NOT NULL REFERENCES "books_publisher" ("id"),
    "publication_date" date NOT NULL
);
CREATE TABLE "books_author" (
    "id" serial NOT NULL PRIMARY KEY,
    "salutation" varchar(10) NOT NULL,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(40) NOT NULL,
    "email" varchar(75) NOT NULL,
    "headshot" varchar(100) NOT NULL
);
CREATE TABLE "books_book_authors" (
    "id" serial NOT NULL PRIMARY KEY,
    "book_id" integer NOT NULL REFERENCES "books_book" ("id"),
    "author_id" integer NOT NULL REFERENCES "books_author" ("id"),
    UNIQUE ("book_id", "author_id")
);
CREATE INDEX books_book_publisher_id ON "books_book" ("publisher_id");
COMMIT;

Отметим следующее:

  • Имена таблиц генерируются автоматически, комбинируется имя приложения (books) и имя модели в нижнем регистре (publisher, book и author). Вы можете изменить это поведение, подробности смотрите в приложении «Справочник определений модели».

  • Как мы уже упоминали, Django автоматически добавляет первичный ключ для каждой таблицы — поле id. Вы можете изменить и это.

  • По правилу Django добавляет «_id» к имени поля внешнего ключа. Как вы можете предположить, вы можете изменить и это поведение.

  • Привязка внешнего ключа явно определяется с помощью оператора REFERENCES.

  • Операторы CREATE TABLE адаптируются к используемой базе данных, таким образом специфичные типы полей, такие как auto_increment (MySQL), serial (PostgreSQL) или integer primary key (SQLite) обрабатываются автоматически. То же самое происходит с экранированием имён полей (т.е., используются двойные или одинарные кавычки). В данном примере приведён синтаксис для PostgreSQL.

Команда sqlall не создаёт таблицы и никак не воздействует на базу данных — она просто выводит SQL операторы на экран и вы можете посмотреть, что будет передано в базу данных. Если вы пожелаете, можно вручную скопировать эти операторы в командную строку клиента базы данных или перенаправить данные в клиент напрямую. Тем не менее, Django предоставляет простой способ выполнения SQL в базе данных. Выполните команду syncdb:

python manage.py syncdb

Вы увидите подобное:

Creating table books_publisher
Creating table books_book
Creating table books_author
Installing index for books.Book model

Команда syncdb просто синхронизирует ваши модели в базе данных. Она просматривает все модели каждого приложения, указанного в параметре INSTALLED_APPS, проверяет наличие соответствующих таблиц в базе данных и по необходимости создаёт их. Следует отметить, что syncdb не синхронизирует изменения в моделях или удаления моделей. Если вы изменили модель или удалили её, то команда syncdb не поможет с внесением изменений в базу. (More on this in the “Making Changes to a Database Schema” section toward the end of this chapter. FIXME)

При повторном запуске команды python manage.py syncdb ничего не произойдёт, так как вы не добавили модели в приложение books или не добавили новое приложение в INSTALLED_APPS. Следовательно, безопасно запускать эту команду — она не испортит базу данных.

Если вам интересно, то изучите подробнее клиент вашей базы данных и просмотрите созданную базу данных. Вы можете вручную запустить клиент (т.е., psql для PostgreSQL) или вы можете применить команду python manage.py dbshell, которая запускает клиент, используя параметр DATABASE_ENGINE. Последний вариант более удобен.


Увидели ошибку?
Выделите её мышкой и нажмите
Ctrl-Enter
Обработано:
504 49 130 71

Версия книги
1.0 2.0
Версия 2.0 в процессе перевода!

Мой луч
Многообразие света

Полезное
Актуальные вакансии, Python работа для python-разработчиков.


Скачать в формате
CHM от 2 сентября

Заказать PDF файл можно через почту, чат, джаббер. Всего 2WMZ. Содержимое точно соответствует содержимому сайта.
Чем чаще заказываете — тем больше перевожу.

Русская группа

на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!
R130494980980
Z425285133788
E112528079659
U327380922061

Книга помогла реализовать:
Проект «Мой луч»
АРМ УФМС.


Мой вебсайт стоит666 337,31 руб

© 2008-2009 Ruslan Popov @ gmail.com Powered by Django 1.1 beta 1 SVN-11114
Главная | Архив новостей | Общение | Площадка | Примеры OpenID