Моделі в Django — це серце вашого додатку при роботі з даними. По суті, модель — це просто "креслення" для інформації, яку ми зберігаємо в базі даних. Клас моделі стає таблицею, а його атрибути — колонками.
Django використовує ORM — розумну систему, яка дозволяє не писати складні SQL-запити. Замість цього ви працюєте з даними на Python, а Django сам спілкується з базою даних.
Як створити модель
Створимо клас моделі у файлі models.py застосунку "Блог". Для цього давайте використаємо наступний кейс: у нас є статті, і кожна стаття має заголовок, вміст, автора, дату публікації та ідентифікатор.
Приклад моделі "Стаття"
from django.db import models
class Article(models.Model):
# Поле для заголовка статті
title = models.CharField(max_length=200, verbose_name="Заголовок")
# Поле для вмісту статті
content = models.TextField(verbose_name="Вміст")
# Поле для автора статті, рядок поки (але скоро замінимо на ForeignKey)
author = models.CharField(max_length=100, verbose_name="Автор")
# Поле для дати публікації
published_date = models.DateTimeField(auto_now_add=True, verbose_name="Дата публікації")
# Магічний метод для гарного відображення об'єкта в адмінці
def __str__(self):
return self.title
models.Model: всі моделі в Django повинні наслідувати відmodels.Model. Це необхідно для активації всіх переваг Django ORM.CharFieldтаTextField: спеціальні типи полів, які визначають, як дані зберігаються в базі даних. Наприклад,CharFieldзберігає рядки фіксованої довжини, аTextField— довгі тексти. Вказанняmax_length— обов'язкове дляCharField.DateTimeField: зберігає дату та час. Атрибутauto_now_add=Trueавтоматично встановлює поточну дату при створенні запису.verbose_name: це зручне ім'я поля, яке відображається в адмінці та інших місцях.__str__(): рекомендується перевизначити цей метод, щоб об'єкти моделі мали читабельне представлення, наприклад, назву статті.
Поля моделі та їх типи
Django надає багато різних типів полів для моделей. Ось кілька найбільш часто використовуваних:
| Поле | Опис | Приклад використання |
|---|---|---|
CharField |
Рядок фіксованої довжини | Ім'я користувача, заголовок статті |
TextField |
Довгий текст | Опис, зміст статті |
IntegerField |
Ціле число | Кількість переглядів, рейтинг |
BooleanField |
Логічний тип даних | Активний/Неактивний |
DateTimeField |
Дата і час | Дата публікації, дата реєстрації |
ForeignKey |
Одне до багатьох (зв'язок між моделями) | Прив'язка статті до автора |
ManyToManyField |
Зв'язок багато до багатьох | Теги, підписники |
EmailField |
Перевірка на валідний email | Контактний email |
SlugField |
Для створення URL-friendly рядків | slug для статті, категорії |
Для повного списку полів обов'язково загляньте в офіційну документацію Django.
Взаємодія моделі з базою даних
Крок 1: Реєстрація моделі в адмінці
Щоб можна було бачити нашу модель в адмінці Django, потрібно зареєструвати її у файлі admin.py:
from django.contrib import admin
from .models import Article
# Реєстрація моделі в адмінці
admin.site.register(Article)
Тепер, якщо ви запустите сервер (команда python manage.py runserver) і перейдете в адмін-зону (зазвичай це http://127.0.0.1:8000/admin), ви побачите розділ для управління статтями.
Крок 2: Міграції
Кожного разу, коли ви створюєте або змінюєте модель, Django вимагає "міграції" змін у базу даних. Це робиться у два етапи:
Створення файлів міграцій:
python manage.py makemigrationsDjango проаналізує ваші зміни в моделях і створить файл з інструкціями для бази даних.
Застосування міграцій:
python manage.py migrateЦя команда "вбудовує" міграції у базу даних, створюючи або змінюючи таблиці.
Крок 3: Додавання даних у модель
Тепер ми можемо додати статті через інтерфейс адмінки. Але що, якщо ми хочемо зробити це програмно? Для цього підійде Django Shell:
python manage.py shell
І всередині оболонки Python:
from blog.models import Article
# Створення нового запису
article = Article.objects.create(
title="Перша стаття",
content="Це вміст моєї першої статті в блозі.",
author="Іван Іванов"
)
# Оновлення заголовка (якщо потрібно)
article.title = "Оновлений заголовок"
article.save()
# Виведення всіх статей
all_articles = Article.objects.all()
for a in all_articles:
print(a.title)
Навіщо це потрібно?
Моделі Django — це основа практично будь-якого веб-додатку. Вони дозволяють нам ефективно працювати з даними, надають можливості для валідації та спрощують взаємодію з базою даних. Усі дії — від простого створення запису до складних SQL-запитів — можна виконувати через ORM, не вдаючись до ручного написання SQL-коду.
Крім того, моделі тісно інтегровані з іншими компонентами Django, такими як форми, адмінка та серіалізатори (які ми будемо використовувати в майбутньому для API). Тому правильне розуміння та проєктування моделей значно полегшує розробку проєкту.
Типові помилки
Одна з класичних помилок новачків — забути додати нову модель або застосунок у INSTALLED_APPS. Якщо ви не бачите змін в адмінці або отримуєте повідомлення про те, що таблиці не існують, перевірте, чи зареєстрована ваша модель у проєкті і чи виконані міграції.
Інша пастка пов'язана зі зміною існуючих моделей. Після додавання нових полів потрібно завжди генерувати міграції та застосовувати їх. Якщо це пропустити, база даних залишиться у старому стані.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ