Перейти до змісту

Django Admin — Адміністрування

Django Admin — автоматично згенерований інтерфейс для керування даними у базі. Доступний за адресою: http://127.0.0.1:8000/admin/


1. Що таке Django Admin?

Уяви, що у тебе є додаток з 1000 нотатками. Тобі потрібно знайти і видалити спам-нотатки або призначити права модератора певному юзеру. Без Admin довелося б писати окремі views для цього.

Django Admin — це готовий інтерфейс де ти можеш: - Переглядати та редагувати будь-який запис у БД - Шукати та фільтрувати дані - Керувати юзерами та їх правами - Виконувати масові операції (наприклад, видалити 50 спам-нотаток одним кліком)


2. Хто має доступ до Admin?

# Два типи привілейованих юзерів:

user.is_staff = True
# ↑ Може заходити на /admin/
# ↑ Але НЕ має жодних прав без явного призначення!

user.is_superuser = True  
# ↑ Автоматично має ВСІ права в системі
# ↑ Навіть ті, що не призначені явно
# ↑ has_perm() завжди повертає True

Критичне правило:

Ніколи не використовуй суперюзера для щоденної роботи!

Причина: якщо суперюзер тестує функціонал — has_perm() завжди True. Це маскує баги авторизації. Реальний юзер без прав може натрапити на помилку, яку ти не бачив при тестуванні від суперюзера.

Відмінності:

Атрибут Доступ до /admin/ Права
is_staff=True ✓ Тільки явно призначені
is_superuser=True ✓ Всі права автоматично
Звичайний юзер ✗ Немає

3. Як зареєструвати модель в Admin

# notes_app/admin.py

from django.contrib import admin
from .models import Note

# Простий спосіб — базова реєстрація:
admin.site.register(Note)

# Розширений спосіб — з кастомізацією:
@admin.register(Note)
class NoteAdmin(admin.ModelAdmin):
    list_display = ('title', 'user', 'group', 'priority', 'created_at')
    # ↑ Які стовпці показувати у списку

    list_filter = ('priority', 'group', 'is_pinned')
    # ↑ Фільтри у правій панелі (/admin/notes_app/note/?priority=4)

    search_fields = ('title', 'content', 'user__username')
    # ↑ Пошук по цих полях
    # user__username → пошук через FK (нотатки юзера з іменем 'alice')

    raw_id_fields = ('user', 'notebook')
    # ↑ Для FK показує поле вводу ID замість select (швидше при 1000+ записах)

Що отримаємо у /admin/:

[ ] | Заголовок          | Юзер  | Група  | Пріоритет | Дата
[ ] | Зустріч з клієнтом | alice | Робота | Терміново | 2025-06-03
[ ] | Купити молоко      | alice | Сімя   | Низький   | 2025-06-02


4. Управління юзерами та правами через Admin

/admin/auth/user/     ← список всіх юзерів
/admin/auth/group/    ← список груп та їх дозволів

Як призначити права юзеру через Admin: 1. /admin/auth/user/42/change/ 2. Розділ "Permissions" → поставити ✓ навпроти потрібних дозволів 3. Або додати юзера до групи (Group) яка вже має потрібні права


5. Створення суперюзера (командний рядок)

# Перший запуск:
cd crispy_notes_chat_app/
python manage.py createsuperuser

# Django запитає:
Username: admin
Email: admin@example.com
Password: (мінімум 8 символів)

# Відкрий браузер:
# http://127.0.0.1:8000/admin/

Де це в нашому проєкті?

Файл Що є
notes_app/admin.py Реєстрація моделей (Note, Notebook, Tag тощо)
notes_chat_app/urls.py path('admin/', admin.site.urls)
settings.py django.contrib.admin у INSTALLED_APPS