Модели данных и поля
В реляционных базах данные хранятся в таблицах, почти как 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
- Больше о моделях в нашей статье связи между моделями
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.