Модели данных и поля
В реляционных базах данные хранятся в таблицах, почти как Excel или Google Spreadsheets. Представим, что у вас есть собственный блог, где вы пишете статьи. Данные о постах в БД выглядят примерно так:
В таблице 5 колонок: номер статьи, заголовок, текст, время создания и время публикации. Каждая строчка — это пост.
Статьи блога хранятся в базе данных, но как их оттуда достать? Для этого и нужен Django ORM. Он извлекает данные из базы в удобном виде: например, даты из колонок время создания и время публикации, он сразу сделает объектами datetime, а не строками. Но чтобы Django ORM работала, ей нужно описание таблицы.
Давайте вместе попробуем составить модель для поста в блоге. Для начала в ней будет только одна колонка — текст:
from django.db import models
class Post(models.Model):
text = models.TextField()
Давайте просто игнорировать все эти class и models.Model и перейдём к сути. Post — это название модели данных — поста в блоге. В базе данных много таблиц и нужно дать ей название.
Таблицу назвали, теперь создадим колонки. Текст статьи сохраним в колонке text. Это и делает последняя строчка: text = models.TextField().
Здесь написано, что у поста будет колонка text, и хранить его нужно в поле для текста — models.TextField(). Поля сообщают какого типа данные будут храниться у модели.
Расширяем модель
Теперь у поста будет и заголовок:
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
text = models.TextField()
Заголовок — это тоже текст, но у него не TextField, а CharField. Это тоже поле для хранения текста, но оно ограничено по длине — не более 200 символов. Эти поля очень похожи, но называются по-разному. Это сделано потому, что для базы данных это достаточно существенно: в одном случае она знает, что на заголовок ей нужно выделить 200 символов памяти, а во втором не понятно сколько памяти займёт эта колонка.
Добавим дату и время написания поста created_date и его публикации published_date:
from django.db import models
class Post(models.Model):
text = models.TextField()
title = models.CharField(max_length=200)
created_date = models.DateTimeField()
published_date = models.DateTimeField()
DateTimeField хранит дату и время. Теперь получилась модель, которая описывает табличку с картинки в начале статьи.
Что читать
Можно узнать как работать с данными в нашей статье Достаем данные из БД.
Или узнать больше о написании моделей:
- Документация Django
- Больше о моделях в нашей статье связи между моделями