JavaRush /Курси /Модуль 3: Django /Створення першої моделі та міграцій

Створення першої моделі та міграцій

Модуль 3: Django
Рівень 6 , Лекція 8
Відкрита

До цього моменту ми вже розібралися, що таке додаток в Django, навчилися його створювати, реєструвати в проєкті та маршрутизувати запити. Тепер настав час зробити наш додаток по-справжньому функціональним, додаючи туди моделі даних і пов'язуючи їх із базою даних. Сьогодні ми дізнаємося, як у Django визначаються моделі, як вони обробляються за допомогою ORM і що таке міграції.

Цілі лекції

  1. Навчитися створювати Django-моделі.
  2. Зрозуміти, як моделі пов'язані з базою даних через ORM.
  3. Вивчити процес міграцій — як вони допомагають зберігати та вносити зміни в структуру бази даних.
  4. Зробити практичний приклад: створимо модель "Автор" для нашого блогу.

Поняття моделі в Django: що це взагалі таке?

Давай розберемося, що таке модель у Django. Уяви собі типовий застосунок — блог. У ньому є статті, автори, коментарі, категорії. Кожна така сутність — це, по суті, набір даних із певною структурою. Наприклад, у статті може бути назва, текст, дата публікації, автор. У Django такі сутності описуються за допомогою моделей.

Модель у Django — це Python-клас, який успадковується від django.db.models.Model. Кожна властивість (атрибут) класу представляє собою стовпець у таблиці бази даних, а об'єкт моделі — це рядок (запис) у цій таблиці.

Приклад: якби таблиця в базі даних була будиночком, то модель у Django — це креслення цього будиночка. ORM (Object-Relational Mapping) бере це креслення і створює реальний будиночок — таблицю в базі.

Як створити модель у Django

Щоб створити модель, виконай такі кроки:

  1. Відкрий файл models.py твого застосунку. У нашому випадку це blog/models.py.
  2. Визнач Python-клас, який буде наслідуватися від django.db.models.Model.
  3. Додай властивості класу, які представлятимуть поля моделі.

Давай створимо просту модель для опису автора блогу. Кожен автор матиме ім'я, прізвище, 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 автоматично генерує файли міграцій, які описують зміни: додавання таблиці, зміна полів і т.п.

Як пов'язані міграції та бази даних?

  1. Модель: це Python-код, який ти пишеш.
  2. Міграція: це проміжний файл, який генерує Django, щоб перетворити модель на інструкції для бази даних.
  3. База даних: після виконання міграції зміни зберігаються у самій базі.

Основні команди для роботи з міграціями

  1. Генерація міграцій Після створення чи зміни моделі в models.py, потрібно згенерувати файл міграції за допомогою команди:
python manage.py makemigrations

Django створить файл міграції, в якому буде описано, яку таблицю потрібно додати в базу даних. Наприклад:

Migrations for 'blog':
  blog/migrations/0001_initial.py
    - Create model Author
  1. Застосування міграцій

Щоб зміни набули чинності і таблиці дійсно з'явилися в базі даних, потрібно виконати команду:

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 налаштує базу даних та створить таблицю для моделі "Автор". Легким рухом коду ми додали нову сутність у базу! Магія.

Що робити, якщо модель потрібно змінити?

Іноді тобі знадобиться змінити модель — наприклад, додати нове поле або змінити тип даних. Ось як це зробити:

  1. Внеси зміни у models.py.
  2. Знову виконай команду python manage.py makemigrations.
  3. Застосуй міграції командою 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. Якщо зміни в моделі не застосувалися, перевірте, чи створювали ви для них міграцію.

Практичне завдання

  1. У вашому проєкті створіть модель "Категорія" для блогу. У кожної категорії повинні бути назва та опис.
  2. Згенеруйте та застосуйте міграцію для моделі "Категорія".
  3. Переконайтеся, що таблиця створена в базі даних. Ви можете використовувати Django Admin для перевірки.
class Category(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField()

    def __str__(self):
        return self.name

Тепер ви володієте основами створення моделей та магією міграцій в Django. Це перший крок до того, щоб ваші дані ожили у застосунках!

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ