|
Table of contents
|
Мы написали код. Давайте создадим таблицы в нашей базе данных. Чтобы это сделать мы должны активировать модели в нашем проекте. Это делается с помощью добавления приложения books к списку установленных приложений в файле параметров.
Откройте файл INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
)
Временно закомментируйте все четыре строки с помощью символа
#. (Эти приложения были активированы для
удобства, но мы самостоятельно активируем и обсудим их позже.)
Не закрывая файл, измените параметры
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, над которым мы работаем. Каждое
приложение, перечисленное в После того как приложение было активировано в файле конфигурации проекта, мы можем создать таблицы в нашей базе данных. Сначала, давайте проверим модели с помощью команды: 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;
Отметим следующее:
Команда 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 просто
синхронизирует ваши модели в базе
данных. Она просматривает все модели каждого приложения,
указанного в параметре
При повторном запуске команды python manage.py syncdb ничего не произойдёт, так как вы не добавили
модели в приложение books или не добавили новое
приложение в
Если вам интересно, то изучите подробнее клиент вашей базы
данных и просмотрите созданную базу данных. Вы можете вручную
запустить клиент (т.е., psql для PostgreSQL)
или вы можете применить команду python manage.py dbshell, которая запускает клиент, используя параметр
|
Found misprint?
Select it with the mouse and hit Enter
-
Processed:
33
1
199
25
The full repository of DjangoBook translation you can get on GitHub.
We appreciate your patches!
We are glad to hear your questions, comments or suggestions!
(Open in new tab)
Users number: 601
Русская группа
Ускорить процесс перевода!
ЯМ:41001223475816
|
| © 2008-2012 Ruslan Popov @ gmail.com | Powered by Django 1.2.5 |
reply to Kallen92
Выдает ошибку ''django doesent know which syntax to use foryour SQL statments because you hevent specified the DATABASE_ENGINE setting ''. как мне настроить setting.py работаю в XP встрял страшно кто знает как настроить ?
Вопросы - на форум.
Выдает ошибку ''django doesent know which syntax to use foryour SQL statments because you hevent specified the DATABASE_ENGINE setting ''. как мне настроить setting.py работаю в XP встрял страшно кто знает как настроить ?
reply to Nail
Ссылка Доступ к данным http://djbook.ru/ch05s08.html не работает. Выдает ошибку 502 Bad Gateway
Сервер глючил
Ссылка Доступ к данным http://djbook.ru/ch05s08.html не работает. Выдает ошибку 502 Bad Gateway
> у меня вообще что то пишит про ерор майскьюэль...... ((((
Можете раскрыто описать проблему на форуме и возможно вам помогут.
у меня вообще что то пишит про ерор майскьюэль...... ((((
А может проще скачать то, что просит? Я думаю хотело PIL. К тому же вам даже ссылку показали.
Насчет записи в модели: headshot = models.ImageField(upload_to='/tmp'). При проверки на правильность синтаксиса модели (validate) выдает ошибку, что чего-то нахватает, дает ссылку и просит скачать. Пришлось просто задокументировать эту часть кода.
Может подправите документ, убрав этот код из учебника или предупредите, что требуется что-то скачать для корректной работы. Некоторые новички могут и не догадаться в чем дело.