Ось готовий урок, згенерований за твоїм майстер-промптом.
🎓 Тема уроку: Admin-панель Django (або як зекономити тиждень роботи за 5 хвилин)
Привіт, друзі! Радий бачити вас знову.
Давайте почнемо з простого запитання. Підніміть руку (або просто кивніть монітору), хто з вас любить писати рутинний код? Ну, знаєте, створювати форми для вводу даних, писати HTML для табличок, налаштовувати валідацію полів, кнопки «Редагувати» та «Видалити»...
Ніхто? Я так і думав.
1. 🔥 Вступ: проблема та мотивація
Уявіть ситуацію. Ви розробляєте інтернет-магазин. Ви вже створили чудову базу даних для товарів. Але тепер перед вами постає проблема: як наповнити цей магазин товарами?
Вашому замовнику (власнику магазину) абсолютно байдуже до SQL. Він не буде відкривати термінал і писати:
INSERT INTO products (name, price) VALUES ('iPhone 15', 999);
Йому потрібен зручний інтерфейс: кнопочки, поля, де можна завантажити картинку, галочки «В наявності».
Що б ви робили без Django? Ви б витратили щонайменше тиждень, створюючи окрему частину сайту «для менеджерів». Ви б верстали форми, писали логіку обробки POST-запитів, перевіряли паролі адміністраторів... Це нудно. Це довго. Це дорого.
Аналогія: Уявіть, що ви будуєте хмарочос (ваш проєкт). Писати адмінку з нуля — це як будувати окремий ліфт, сходи і службовий вхід для персоналу, викладаючи кожну цеглинку вручну. Django ж каже: "Гей, я привіз тобі готовий, повністю укомплектований командний пункт. Просто встав ключ і керуй будівлею".
Сьогодні ми розберемо Django Admin — інструмент, який автоматично створює інтерфейс для управління даними на основі вашого коду.
2. 🧠 Теоретична база (без сухої академічності)
Отже, що таке Django Admin "під капотом"?
Це не магія, хоча виглядає саме так. Це звичайний Django-застосунок (django.contrib.admin), який вже встановлений у вашому проєкті за замовчуванням.
Як це працює?
- Django сканує ваш файл
models.py. Він бачить: "Ага, тут є полеInteger, значить, мені треба намалювати поле, куди можна вводити тільки цифри". - Він бачить поле
ImageFieldі автоматично створює кнопку "Завантажити файл". - Він бачить зв'язок
ForeignKeyі створює випадаючий список.
Що треба запам’ятати залізно:
* Адмінка — це CMS (Content Management System) для персоналу сайту, а не для звичайних відвідувачів.
* Щоб потрапити туди, потрібен користувач зі статусом is_staff або is_superuser.
* Файл управління адмінкою — admin.py (знаходиться в папці вашого додатку).
Інтуїтивне розуміння: Адмінка — це дзеркало вашої бази даних. Якщо ви змінили щось у базі (у моделях), адмінка підлаштується автоматично. Вам не треба переписувати HTML.
3. 🧪 Приклади (від простого до реального)
Припустімо, у нас є модель Product у файлі models.py:
class Product(models.Model):
title = models.CharField(max_length=200)
price = models.DecimalField(max_digits=10, decimal_places=2)
is_active = models.BooleanField(default=True)
def __str__(self):
return self.title
Рівень 1: Мінімальний (щоб просто запрацювало)
Відкриваємо admin.py і пишемо:
from django.contrib import admin
from .models import Product
admin.site.register(Product)
Питання до вас: Що ми побачимо, коли зайдемо в адмінку?
Ми побачимо список товарів. Але він виглядатиме просто як список назв (завдяки методу __str__). Щоб змінити ціну, треба клікати на кожен товар окремо. Не дуже зручно, якщо у вас 1000 товарів, правда?
Рівень 2: Реальний проєкт (як роблять профі)
Давайте зробимо таблицю інформативною. Ми хочемо бачити ціну одразу в списку і мати можливість шукати товар за назвою.
Ми використовуємо декоратор (це як красива обгортка для нашої моделі):
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
list_display = ('title', 'price', 'is_active') # Які стовпці показувати
search_fields = ('title',) # Пошук за назвою
list_filter = ('is_active',) # Фільтр збоку (Активні/Неактивні)
Чому результат такий?
Тепер Django малює повноцінну таблицю. list_display перетворює поля моделі на стовпці таблиці. list_filter додає бічну панель. Ви економите години роботи менеджера, який буде з цим працювати.
Рівень 3: "Магія" (редагування на льоту)
А що, якщо менеджеру треба швидко змінити ціни на 50 товарів? Заходити в кожен — це пекло. Додамо list_editable.
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
list_display = ('title', 'price', 'is_active')
list_editable = ('price', 'is_active') # <-- Дозволяємо редагувати прямо в списку!
Тепер список товарів перетворюється на Excel-таблицю прямо в браузері. Змінив цифри, натиснув "Зберегти" — готово.
4. 🛠 Практична частина
Час забруднити руки кодом! Відкривайте IDE.
Завдання 1: Створення Бога (Superuser)
Ви не потрапите в адмінку без перепустки. У терміналі:
python manage.py createsuperuser
Придумайте логін і пароль (пароль не буде відображатись при введенні — це нормально, це безпека!). Зайдіть за адресою /admin/.
Завдання 2: "Hello World" в адмінці
Зареєструйте будь-яку вашу модель через admin.site.register(). Переконайтеся, що вона з'явилася в панелі. Створіть через адмінку 2-3 записи.
Завдання 3: Робимо красиво
Перепишіть реєстрацію, використовуючи клас ModelAdmin (як у прикладі 2).
* Виведіть мінімум 3 поля в list_display.
* Додайте пошук.
Завдання 4: Міні-кейс
Уявіть, що у товару є поле created_at (дата створення).
* Зробіть так, щоб це поле було тільки для читання (readonly_fields). Адже ми не можемо змінити минуле, коли товар був створений, вірно?
Завдання 5: А що, якщо...
Спробуйте додати в list_display поле, якого немає в базі даних. Наприклад, ви хочете вивести "Ціна з податком" (ціна * 1.2).
Підказка: Це робиться шляхом створення методу всередині класу ProductAdmin.
5. 💡 Мислення як у розробника
Як відрізнити новачка від сеньйора, дивлячись на admin.py?
Типові помилки новачка:
1. "Admin Object (1), Admin Object (2)": Забувають додати метод __str__ у моделі. У підсумку в адмінці список безіменних об'єктів.
2. Зайвий доступ: Дають доступ до адмінки звичайним клієнтам. Пам'ятайте: адмінка — це "бекенд офісу", а не кабінет користувача.
3. Перевантаження: Намагаються переписати адмінку так сильно, що вона перетворюється на кастомний сайт. Якщо вам треба дуже складна логіка — краще напишіть власні views. Не ґвалтуйте адмінку.
Порада з практики (Security):
У реальному житті ніколи не залишайте адресу /admin/ стандартною. Хакери сканують її першою. Змініть її в urls.py на щось на кшталт /super-secret-control-panel/.
Як думає профі: "Я використовую адмінку, щоб швидко протестувати свої моделі та дати замовнику інструмент у перший же день розробки. Я налаштовую її рівно настільки, щоб вона була зручною, але не витрачаю на неї тижні".
6. 🧩 Підсумок
Отже, що ми сьогодні зробили? 1. Зрозуміли, що Django пише інтерфейс за нас. 2. Навчилися реєструвати моделі в адмінці. 3. Освоїли кастомізацію: таблиці, пошук, фільтри. 4. Зрозуміли, що це інструмент для персоналу, а не для клієнтів.
Що ви тепер вмієте? Ви можете створити повноцінну систему управління контентом (CMS) за 10 хвилин. Серйозно, люди платять за це гроші.
Тизер: Зараз у нас є дані і є зручна адмінка для їх редагування. Але звичайний користувач інтернету не бачить адмінки. Як нам витягнути ці дані з бази і красиво показати їх на сайті? На наступному уроці ми поговоримо про Views (Відображення) та Templates (Шаблони). Ми навчимо Django розмовляти з користувачем мовою HTML.
А поки — експериментуйте з адмінкою. Це ваша пісочниця! 🚀