JavaRush /Курси /Модуль 3: Django /Реєстрація моделей в адмін-зоні

Реєстрація моделей в адмін-зоні

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

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

Для початку відповімо на питання, а що взагалі означає реєстрація моделі? Справа в тому, що коли ти створюєш модель у своєму додатку, Django "не знає", що ти хочеш керувати цією моделлю через адмін-зону. Для цього тобі потрібно зареєструвати модель. Реєстрація моделі — це як додавання елемента в список: ти кажеш Django, що цей об'єкт має бути видимим в адмін-зоні. Реєстрація моделі виконується через модуль admin твого додатку.

Приклад: реєстрація простої моделі

Спочатку створимо базову модель

# models.py
from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=255)
    author = models.CharField(max_length=255)
    published_date = models.DateField()

    def __str__(self):
        return self.title

Тепер зареєструємо її в адмін-зоні

# admin.py
from django.contrib import admin
from .models import Book

admin.site.register(Book)

Ось так просто! Тепер, якщо ви зайдете в адмінку (за замовчуванням /admin), ви побачите вашу модель "Book". Ви можете додавати, змінювати та видаляти дані цієї моделі. Магія? Трохи, але насправді всього кілька рядків.

Тепер давайте запустимо адмін-зону.

Щоб скористатися Django Admin:

  1. Переконайтеся, що у вас є суперкористувач. Якщо його немає, створіть за допомогою команди:
  2. Зайдіть у браузері за шляхом /admin, введіть логін і пароль суперкористувача, і ви побачите список зареєстрованих додатків
   python manage.py createsuperuser

Кастомізація реєстрації моделей

Ну, зареєстрували модель — прекрасно, але часто буває, що базових можливостей недостатньо. Наприклад, ви хочете бачити більше інформації в таблиці об'єктів або додати якісь дії. Для цього можна використовувати клас ModelAdmin.

Якщо ви відкриєте список об'єктів моделі "Book" в адмін-зоні, ви помітите, що за замовчуванням відображається тільки строкове представлення об'єкта (це результат методу __str__). А що, якщо нам потрібно бачити одразу два поля, скажімо, назву книги і автора? Для цього переопишемо відображення моделі.

Давайте кастомізуємо модель на практиці:

# admin.py
from django.contrib import admin
from .models import Book

class BookAdmin(admin.ModelAdmin):
    # Вказуємо, які поля відображати в списку об'єктів
    list_display = ('title', 'author', 'published_date')

# Реєструємо модель з кастомним admin
admin.site.register(Book, BookAdmin)

Тепер, коли ви зайдете в список об'єктів "Book" в адмін-зоні, ви побачите таблицю з колонками title, author і published_date. Це все ще просто, але вже набагато зручніше!

Більш складна кастомізація реєстрації

Можливості ModelAdmin на цьому не закінчуються. Давай розглянемо ще кілька корисних прикладів, які часто використовуються в реальних проєктах.

Припустимо, у тебе багато книг, і ти хочеш шукати їх за назвою або автором.

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'author', 'published_date')
    search_fields = ('title', 'author')  # Поля, за якими можна шукати

Тепер у верхній частині сторінки зі списком моделі "Book" з'явиться поле пошуку!

А що, якщо ти хочеш швидко відфільтрувати книги, наприклад, за роком публікації? Для цього використовується атрибут list_filter.

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'author', 'published_date')
    search_fields = ('title', 'author')
    list_filter = ('published_date',)  # Додаємо фільтри

На правій стороні сторінки з'явиться панель із можливістю фільтрації за датою публікації.

Реєстрація кількох моделей

Якщо у вас кілька моделей, ви можете зареєструвати їх усі в одному файлі admin.py.

from django.contrib import admin
from .models import Book, Author, Publisher

admin.site.register(Book)
admin.site.register(Author)
admin.site.register(Publisher)

Але! Якщо вам потрібна кастомізація, краще використовувати клас ModelAdmin для кожної моделі.

Корисні практики та можливі помилки

  1. Не забудьте про міграції. Якщо ви створюєте модель, завжди робіть і застосовуйте міграції:

    python manage.py makemigrations
    python manage.py migrate
    
  2. Майте чітку структуру. Переконайтеся, що кожен додаток має свій файл admin.py для реєстрації моделей.

  3. Працюйте з методами. Ви можете використовувати методи в ModelAdmin для відображення обчислюваних полів. Наприклад:

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'author', 'days_since_published')

    def days_since_published(self, obj):
        from datetime import date
        delta = date.today() - obj.published_date
        return delta.days

    days_since_published.short_description = 'Днів з публікації'

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

  1. Створіть модель "Author" з полями name і birth_date. Зареєструйте її в адмін-зоні.
  2. Додайте модель "Publisher" з полями name і location. Зареєструйте її з кастомізацією, додавши пошук за іменем.
  3. Налаштуйте фільтрацію для моделі "Book" за автором (створіть зв'язок ForeignKey між моделлю "Book" і "Author").

Тепер ви знаєте, як реєструвати моделі в адмін-зоні і кастомізувати їх для зручного управління даними. Django Admin — це не просто інструмент, а повноцінний помічник розробника. Вчіться використовувати його на максимум!

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