|
Table of contents
|
В качестве постоянного примера в этой и следующих главах мы сосредоточимся на простом формате данных: книга, автор, издатель. Мы используем это в качестве нашего примера, потому что концептуальные взаимоотношения между этими понятиями широко известны и потому что этот общий формат данных используется в книгах по SQL. Вы также читаете книгу, которая создана авторами и напечатана издателем! Мы предположим следующие концепции, поля и взаимоотношения:
Первым шагом в использовании этой схемы базы данных будет её
выражение в виде кода Python. В файл
from django.db import models
class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=30)
country = models.CharField(max_length=50)
website = models.URLField()
class Author(models.Model):
salutation = models.CharField(max_length=10)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField()
headshot = models.ImageField(upload_to='/tmp')
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
Быстро рассмотрим этот код, чтобы разобраться с основами. Первое, что следует отметить — каждая модель
представлена в виде класса Python, который является потомком
класса
django.db.models.
Обычно каждая модель соответствует одной таблице в базе данных
и, обычно, каждый атрибут модели соответствует столбцу в
таблице. Имя атрибута модели соответствует имени столбца
таблицы, а тип атрибута (т.е., CharField)
соответствует типу столбца (т.е.,
varchar). Например, модель
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
);
На самом деле Django может сгенерировать такой оператор CREATE TABLE автоматически, мы это скоро покажем. Исключением из правила «один класс для одной таблицы» является случай отношения «многие-ко-многим». В нашем примере Book имеет такое поле — authors. Это означает, что книга имеет одного или более авторов, но таблица Book не получает такого столбца, Django создаёт дополнительную таблицу, которая применяется для обеспечения этой функциональности. Полный список типов полей и опций синтаксиса моделей приведены в Приложении «Справочник определений модели». Наконец, следует отметить, что мы нигде явно не определяли первичные ключи. Если специально не запрещать, то Django автоматически создаёт поле id для таблицы каждой модели. Необходимо, чтобы каждая модель Django имела первичный ключ, созданный по одному полю. |
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 |
Промазал разделом. Комментарий относится к следующему разделу "Установка модели"
Сразу не получилось.
validate выдал, что не установлена библиотека PIL, которая нужна для типа ImageField. И сказал, что надо взять отсюда - http://www.pythonware.com/products/pil/
Скачал. Установил. Всё заработало.