Давай розбиратися з реєстрацією моделей у 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:
- Переконайтеся, що у вас є суперкористувач. Якщо його немає, створіть за допомогою команди:
- Зайдіть у браузері за шляхом
/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 для кожної моделі.
Корисні практики та можливі помилки
Не забудьте про міграції. Якщо ви створюєте модель, завжди робіть і застосовуйте міграції:
python manage.py makemigrations python manage.py migrateМайте чітку структуру. Переконайтеся, що кожен додаток має свій файл
admin.pyдля реєстрації моделей.Працюйте з методами. Ви можете використовувати методи в
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 = 'Днів з публікації'
Практичне завдання
- Створіть модель "Author" з полями
nameіbirth_date. Зареєструйте її в адмін-зоні. - Додайте модель "Publisher" з полями
nameіlocation. Зареєструйте її з кастомізацією, додавши пошук за іменем. - Налаштуйте фільтрацію для моделі "Book" за автором (створіть зв'язок
ForeignKeyміж моделлю "Book" і "Author").
Тепер ви знаєте, як реєструвати моделі в адмін-зоні і кастомізувати їх для зручного управління даними. Django Admin — це не просто інструмент, а повноцінний помічник розробника. Вчіться використовувати його на максимум!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ