Давайте разбираться с регистрацией моделей в 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 — это не просто инструмент, а полноценный помощник разработчика. Учитесь использовать его на максимум!
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ