Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Django Admin Python: Разработка на фреймворке Django

Создание раздела администратора, через который пользователи смогут добавлять, изменять и удалять данные — утомительная работа. Она не требует творческого подхода. По этой причине Django полностью автоматизирует создание раздела администратора на основе моделей.

Django разрабатывался с упором на разделение сайта на две части: редактирование контента и просмотр контента. В этом уроке мы разберем работу с Django Admin, который администраторы сайта используют, чтобы добавлять контент на сайт. И он будет отображаться для всех посетителей сайта. Django Admin не предназначен для использования обычными посетителями, это место для управления сайтом.

Создание суперпользователя

Если мы посмотрим на наш главный файл urls.py, то увидим, что по умолчанию раздел администратора у нас подключен:

urlpatterns = [
    # ...
    path('admin/', admin.site.urls),
]

Если перейти по данному адресу, откроется страница для входа в раздел администратора:

image_login

Чтобы войти в раздел администратора, нам необходимо иметь учетную запись пользователя со статусом Staff. Мы можем создать учетную запись superuser, у которой есть полный доступ к сайту и все необходимые разрешения. Для этого выполним следующую команду и заполним информацию о себе:

python manage.py createsuperuser

Username: admin
Email address: admin@example.com
Password: **********
Password (again): **********
Superuser created successfully.

Теперь мы можем зайти в админку под созданной учетной записью:

image_1

В этом разделе мы видим все наши модели, которые сгруппированы по установленному приложению. Пока мы видим несколько типов редактируемого контента: группы и пользователи. Они предоставляются django.contrib.auth платформой аутентификации, которая поставляется Django.

Регистрация моделей

Чтобы добавить в админку наши модели для редактирования, нам нужно отредактировать файл admin.py. Он расположен внутри приложения:

from django.contrib import admin
from .models import Article

admin.site.register(Article)

Мы зарегистрировали нашу модель в админке, и при обновлении страницы у нас появится новый раздел:

image_2

Теперь через новый раздел мы можем управлять данными в модели: добавлять, редактировать и удалять. Но если откроем список статей, увидим следующие названия:

image_3

Такие названия задаются методом __str__, который по умолчанию состоит из названия класса и id записи в базе данных. Чтобы привести данный список к более читаемому и понятному виду, нам нужно в классе модели переопределить данный метод:

class Article(models.Model):
    name = models.CharField(max_length=200)
    body = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name

В данном примере мы указываем, что в качестве названия объекта нужно возвращать значение поля name. Так в качестве названия мы можем использовать любые поля, их комбинации или брать поля из связанных моделей. Теперь наш список будет выглядеть более читаемым для человека:

image_4

Настройка отображения

Возможности Django Admin на этом не заканчиваются. Например, при помощи дополнительных параметров можно производить фильтрации списков по параметрам, ограничивать список выдачи по авторам, организовывать поиск.

Попробуем добавить поисковую форму, чтобы можно было найти нужную статью по названию. Для этого изменим содержание файла admin.py:

from django.contrib import admin

from .models import Article

class ArticleAdmin(admin.ModelAdmin):
    search_fields = ['name', 'body']

admin.site.register(Article, ArticleAdmin)

Мы добавили класс, который описывает дополнительные свойства для отображения и работы с нашей моделью в разделе администратора. В данном случае мы указали поле search_fields, в которое передали списком названия полей. По ним будет осуществляться поиск. Всю остальную работу по добавлению поля для ввода поискового запроса, контекстному поиску по выбранным полям на себя берет Django Admin:

image_5

Мы можем улучшить читаемость нашего кода, если воспользуемся декоратором @admin.register(). Он позволяет связать модель с классом и провести регистрацию модели в разделе администратора:

from django.contrib import admin

from .models import Article

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    search_fields = ['name', 'body']

Еще добавим отображение в списке статей даты публикации и фильтрацию по данному полю:

from django.contrib import admin
from django.contrib.admin import DateFieldListFilter

from .models import Article

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('name', 'created_at') # Перечисляем поля, отображаемые в таблице списка статей
    search_fields = ['name', 'body']
    list_filter = (('created_at', DateFieldListFilter),) # Перечисляем поля для фильтрации

image_6

Кроме этого мы можем настраивать разделение на секции, выделять подробное представление, работать со связанными записями, управлять отображением полей.

Django Admin — мощный инструмент, с помощью которого можно автоматизировать создание административной части сайта, просмотра, обновления и удаления записей. Это позволяет сэкономить много времени в процессе разработки и упростить тестирование моделей.


Самостоятельная работа

  1. Выполните все шаги из теории
  2. Попробуйте добавить, изменить и удалить данные через раздел администратора

Дополнительные материалы

  1. Django Admin

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 6 300 ₽ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 2 мая

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу