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

Створення першої моделі

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

Перш ніж заглиблюватися в код, давай розберемося, навіщо взагалі потрібні моделі. Модель у Django — це свого роду міст між твоєю базою даних і Python-кодом. Вона описує структуру даних, що зберігаються в базі, і надає способи взаємодії з цими даними. Під капотом Django ORM (Object-Relational Mapping) перетворює твої моделі на SQL-запити, тим самим позбавляючи тебе необхідності писати купу SQL вручну. Зручно? Безперечно.

Можна сказати, що модель — це креслення або шаблон таблиці в базі даних, де задається структура (поля та їхні типи) і логіка роботи з даними. Кожен екземпляр моделі представляє один рядок у таблиці, а самі поля моделі відповідають колонкам таблиці.

Структура класу моделі в Django

Модель у Django створюється як клас, який наслідується від базового класу models.Model. Ось основна структура:

from django.db import models

class MyModel(models.Model):
    # ваші поля тут
    pass

Звучить занадто просто? Так і є. Ви просто описуєте поля моделі, і Django сам подбає про створення таблиці під капотом. Але давайте розберемо це більш детально.

Пишемо першу модель: крок за кроком

Створимо просту модель для нашого проєкту. Припустимо, ми робимо застосунок для бібліотеки (нехай це буде наша стартова тема). Нам потрібна модель для зберігання інформації про книги.

Крок 1: Відкриваємо файл models.py

Файл models.py для кожного застосунку (app) використовується для опису моделей. Відкрийте його, і ви побачите, що він вже містить рядок імпорту models.

Крок 2: Створюємо модель Book

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

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=200)  # Назва книги
    author = models.CharField(max_length=100)  # Ім'я автора
    published_date = models.DateField()  # Дата публікації

Розберемо код по частинах:

  • title: поле типу CharField, яке використовується для текстових даних невеликої довжини. Атрибут max_length вказує максимальну кількість символів.
  • author: ще одне CharField для імені автора. Тут також важливо вказати max_length.
  • published_date: поле типу DateField, яке використовується для зберігання дати. Чудовий вибір, якщо ваша база даних аналізуватиме дати.

Якщо не вказати max_length у CharField, Django подивиться на вас так само осудливо, як кіт, якого розбудили серед ночі.

Кореляція: модель і база даних

Коли ми створюємо модель, Django автоматично використовує її для формування схеми бази даних. Наприклад, наведена вище модель Book перетвориться на SQL-запит приблизно такого вигляду:

CREATE TABLE library_book (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title VARCHAR(200) NOT NULL,
    author VARCHAR(100) NOT NULL,
    published_date DATE NOT NULL
);

Зверни увагу, що поле id не було явно вказано в нашій моделі. Django автоматично додає це поле як первинний ключ для кожної моделі.

Практичний приклад: створення моделі користувача

Припустимо, тепер нам потрібно додати модель користувача для нашої бібліотеки. Кожному користувачу потрібно вказувати ім'я, електронну пошту та дату реєстрації. Ось як це буде виглядати:

class User(models.Model):
    name = models.CharField(max_length=100)  # Ім'я користувача
    email = models.EmailField(unique=True)  # Унікальний email
    registration_date = models.DateTimeField(auto_now_add=True)  # Дата реєстрації
  • EmailField: поле, спеціально розроблене для перевірки формату адреси електронної пошти.
  • unique=True: гарантує, що два користувачі не зможуть зареєструватися з однаковим email.
  • auto_now_add: для DateTimeField це означає, що значення буде автоматично встановлено на поточну дату та час при створенні об'єкта.
Примітка:

auto_now_add підходить для незмінних дат (наприклад, дати реєстрації). Якщо вам потрібно динамічно оновлювати дату (наприклад, дату останнього оновлення), використовуйте auto_now.

Що далі?

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

  1. Створити міграцію (файл, що описує зміни в структурі бази даних):

    python manage.py makemigrations
    

    Django створить файл міграції, який представляє ваші зміни.

  2. Застосувати міграцію (внести зміни у базу даних):

    python manage.py migrate
    

    Тепер таблиці для ваших моделей будуть створені.

Перевіряємо результат

Після створення і застосування міграцій можна переконатися, що таблиці були створені коректно. Є два способи це зробити:

Спосіб 1: Використання Django shell

Відкрийте Django shell:

python manage.py shell

Спробуйте створити об'єкт Book:

from library.models import Book

# Створюємо екземпляр книги
book = Book(title="Гаррі Поттер", author="Дж. К. Роулінг", published_date="1997-06-26")
book.save()  # Зберігаємо в базі

# Перевіряємо збереження
print(Book.objects.all())

Вивід повинен показати, що об'єкт був успішно доданий.

Спосіб 2: Перевірка бази даних напряму

Підключіться до вашої бази даних (наприклад, SQLite) і виконайте запит:

SELECT * FROM library_book;

Ви побачите рядок із даними вашої книги.

Які помилки можуть виникнути?

  1. "table does not exist": якщо ти забув виконати міграції, Django буде сваритися, що таблиця не існує. Завжди запускай migrate.
  2. Помилка унікальності: поля з unique=True повинні містити унікальні значення. Якщо ти спробуєш створити запис із дубльованим значенням, отримаєш помилку.
  3. "NOT NULL constraint failed": поля без атрибута null=True вимагають обов'язкового значення.

Для чого це потрібно в реальному житті?

Створення моделей дозволяє централізовано керувати всіма аспектами структури бази даних. Якщо одного разу ви вирішите додати нове поле або змінити логіку роботи з даними, вам достатньо буде внести зміни в модель. Django подбає про все інше. Це корисно не лише для розробки, але й для підтримки коду. Наприклад:

  • Під час розробки інтернет-магазину моделі допоможуть описати товари, замовлення, користувачів.
  • У блозі моделі представляють пости, коментарі, теги.
  • А в нашій бібліотеці — книги, авторів і читачів.

Визначення моделей — це стартова точка для всього застосунку.

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