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 — это не просто инструмент, а полноценный помощник разработчика. Учитесь использовать его на максимум!

1
Задача
Модуль 3: Django, 11 уровень, 1 лекция
Недоступна
Регистрация простой модели в админ-зоне
Регистрация простой модели в админ-зоне
1
Задача
Модуль 3: Django, 11 уровень, 1 лекция
Недоступна
Кастомизация списка объектов через ModelAdmin
Кастомизация списка объектов через ModelAdmin
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ