Первый пример модели Django
В этой и в следующей главе мы будем работать с базой данных, хранящей информацию о книгах, авторах и издательствах. Мы решили остановиться на этом примере, потому что концептуальные отношения между книгами, авторами и издательствами хорошо известны и разобраны во многих учебниках по SQL. Да и сейчас вы читаете книгу, которая написана авторами и опубликована издательством!
Мы принимаем следующие допущения:
• У автора есть имя, фамилия и адрес электронной почты.
• У издательства есть название, адрес, город, штат или область, страна и адрес в Интернете.
• У книги есть название и дата публикации, а также один или несколько авторов (отношение многие-ко-многим между книгами и авторами) и единственное издательство (отношение один-ко-многим с издательствами, иначе называемое внешним ключом).
Самый первый шаг при использовании такой структуры базы данных в Django - выразить ее в виде кода на Python. Введите следующий текст в файл models.ру, созданный командой startapp:
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):
first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=40) email = models.EmailField()
class Book(models.Model):
title = models.CharField(max_length=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField()
На примере этого кода рассмотрим основные принципы. Прежде всего, отметим, что любая модель представлена классом, наследующим класс django.db.models.Model. Родительский класс Model содержит все необходимое, чтобы эти объекты могли взаимодействовать с базой данных, поэтому наши модели отвечают только за определение собственных полей, так что мы получаем красивую и компактную запись. Хотите верьте, хотите нет, но это все, что нужно для обеспечения простого доступа к данным в Django.
Вообще говоря, каждая модель соответствует одной таблице базы данных, а каждый атрибут модели - одному столбцу таблицы. Имя атрибута соответствует имени столбца, а тип поля (например, CharField) - типу столбца (например, varchar). Так, модель Publisher эквивалентна следующей таблице (использован синтаксис команды CREATE TABLE, принятый в PostgreSQL).
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 типа ManyToManyField. Это означает, что у книги может быть один или несколько авторов. Однако в таблице Book нет столбца authors. Поэтому Django создает дополнительную таблицу - связующую для отношения многие-ко-многим, - которая и реализует отображение между книгами и авторами.
Полный перечень типов полей и синтаксиса моделей приведен в приложении В.
Наконец, отметим, что ни для одной модели мы не определили явно первичный ключ. Если не указано противное, Django автоматически включает в каждую модель автоинкрементный первичный ключ целого типа - поле id. Любая модель в Django должна иметь первичный ключ ровно по одному столбцу.
Источник: Головатый А., Каплан-Мосс Дж. Django. Подробное руководство, 2-е издание. - Пер. с англ. - СПб.: Символ- Плюс, 2010. - 560 е., ил.
Похожие посты:
- ЗНАКОМСТВО С ПОИСКОВОЙ СИСТЕМОЙ GOOGLE (0)
- Получение больших наборов данных (0)
- Анализ большого набора данных (0)
- Пример: выявление тенденций (0)
- Создание таксономии запросов (0)
- Завершение углубленного анализа востребованности поисковых запросов (0)
- Выбор поставщика услуг по поисковой оптимизации сайта (0)