До цього моменту ми вже розібралися, що таке додаток в Django, навчилися його створювати, реєструвати в проєкті та маршрутизувати запити. Тепер настав час зробити наш додаток по-справжньому функціональним, додаючи туди моделі даних і пов'язуючи їх із базою даних. Сьогодні ми дізнаємося, як у Django визначаються моделі, як вони обробляються за допомогою ORM і що таке міграції.
Цілі лекції
- Навчитися створювати Django-моделі.
- Зрозуміти, як моделі пов'язані з базою даних через ORM.
- Вивчити процес міграцій — як вони допомагають зберігати та вносити зміни в структуру бази даних.
- Зробити практичний приклад: створимо модель "Автор" для нашого блогу.
Поняття моделі в Django: що це взагалі таке?
Давай розберемося, що таке модель у Django. Уяви собі типовий застосунок — блог. У ньому є статті, автори, коментарі, категорії. Кожна така сутність — це, по суті, набір даних із певною структурою. Наприклад, у статті може бути назва, текст, дата публікації, автор. У Django такі сутності описуються за допомогою моделей.
Модель у Django — це Python-клас, який успадковується від django.db.models.Model. Кожна властивість (атрибут) класу представляє собою стовпець у таблиці бази даних, а об'єкт моделі — це рядок (запис) у цій таблиці.
Приклад: якби таблиця в базі даних була будиночком, то модель у Django — це креслення цього будиночка. ORM (Object-Relational Mapping) бере це креслення і створює реальний будиночок — таблицю в базі.
Як створити модель у Django
Щоб створити модель, виконай такі кроки:
- Відкрий файл
models.pyтвого застосунку. У нашому випадку цеblog/models.py. - Визнач Python-клас, який буде наслідуватися від
django.db.models.Model. - Додай властивості класу, які представлятимуть поля моделі.
Давай створимо просту модель для опису автора блогу. Кожен автор матиме ім'я, прізвище, email та дату реєстрації.
from django.db import models
class Author(models.Model):
# Поле для імені автора
first_name = models.CharField(max_length=50)
# Поле для прізвища автора
last_name = models.CharField(max_length=50)
# Поле для email
email = models.EmailField(unique=True)
# Поле для дати реєстрації
date_registered = models.DateTimeField(auto_now_add=True)
def __str__(self):
# Цей метод використовується для представлення об'єкта у строковому форматі
return f"{self.first_name} {self.last_name}"
Розберемо структуру коду
models.CharField(max_length=50): Поле для зберігання текстових даних. Аргументmax_lengthвказує максимальну довжину рядка.models.EmailField(unique=True): Це спеціальне поле для зберігання email-адрес. Аргументunique=Trueозначає, що email має бути унікальним.models.DateTimeField(auto_now_add=True): Поле для зберігання дати та часу.auto_now_add=Trueавтоматично заповнює поле поточною датою та часом під час створення об'єкта.- Метод
__str__: Повертає строкове представлення об'єкта моделі. Це допомагає, наприклад, у адмін-панелі Django, щоб об'єкти відображалися у зручному вигляді.
Що таке міграції і навіщо вони потрібні?
Міграції — це спосіб керувати змінами в структурі бази даних через код. Коли ти створюєш або редагуєш модель, Django автоматично генерує файли міграцій, які описують зміни: додавання таблиці, зміна полів і т.п.
Як пов'язані міграції та бази даних?
- Модель: це Python-код, який ти пишеш.
- Міграція: це проміжний файл, який генерує Django, щоб перетворити модель на інструкції для бази даних.
- База даних: після виконання міграції зміни зберігаються у самій базі.
Основні команди для роботи з міграціями
- Генерація міграцій Після створення чи зміни моделі в
models.py, потрібно згенерувати файл міграції за допомогою команди:
python manage.py makemigrations
Django створить файл міграції, в якому буде описано, яку таблицю потрібно додати в базу даних. Наприклад:
Migrations for 'blog':
blog/migrations/0001_initial.py
- Create model Author
- Застосування міграцій
Щоб зміни набули чинності і таблиці дійсно з'явилися в базі даних, потрібно виконати команду:
python manage.py migrate
Ця команда застосовує всі створені міграції до бази даних.
Практика: створюємо модель та виконуємо міграції
Час попрацювати руками та додати модель "Автор" у наш застосунок!
Крок 1: Визначаємо модель у models.py Ми вже це зробили. Наш код для моделі "Автор" готовий.
Крок 2: Генеруємо файл міграції
Відкрийте термінал, перейдіть у папку проєкту та виконайте команду:
python manage.py makemigrations
Ви побачите приблизно наступне:
Migrations for 'blog':
blog/migrations/0001_initial.py
- Create model Author
Крок 3: Застосовуємо міграцію
Тепер створимо таблицю у базі даних. Виконайте команду:
python manage.py migrate
Якщо все пройшло успішно, Django налаштує базу даних та створить таблицю для моделі "Автор". Легким рухом коду ми додали нову сутність у базу! Магія.
Що робити, якщо модель потрібно змінити?
Іноді тобі знадобиться змінити модель — наприклад, додати нове поле або змінити тип даних. Ось як це зробити:
- Внеси зміни у
models.py. - Знову виконай команду
python manage.py makemigrations. - Застосуй міграції командою
python manage.py migrate.
Приклад: додамо поле "біографія" для автора.
Внеси зміни у модель:
class Author(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.EmailField(unique=True)
date_registered = models.DateTimeField(auto_now_add=True)
bio = models.TextField(blank=True, null=True) # Поле для біографії
def __str__(self):
return f"{self.first_name} {self.last_name}"
Згенеруй та виконай міграції:
python manage.py makemigrations
python manage.py migrate
Тепер модель "Автор" оновлена, а база даних знає про нове поле.
Можливі помилки та їх вирішення
Іноді процес створення моделі та міграцій може викликати помилки. Ось кілька типових ситуацій:
- Помилка
Table already exists: це трапляється, якщо таблиця вже існує в базі даних. Переконайтеся, що ви не дублюєте існуючі моделі. - Помилка
Field requires a default value: якщо ви додаєте нове поле до моделі, Django може попросити вказати значення за замовчуванням. Ви можете використовуватиdefaultабо додатиnull=True. - Забули зробити міграції: іноді легко забути про команду
makemigrations. Якщо зміни в моделі не застосувалися, перевірте, чи створювали ви для них міграцію.
Практичне завдання
- У вашому проєкті створіть модель "Категорія" для блогу. У кожної категорії повинні бути назва та опис.
- Згенеруйте та застосуйте міграцію для моделі "Категорія".
- Переконайтеся, що таблиця створена в базі даних. Ви можете використовувати Django Admin для перевірки.
class Category(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
def __str__(self):
return self.name
Тепер ви володієте основами створення моделей та магією міграцій в Django. Це перший крок до того, щоб ваші дані ожили у застосунках!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ