Создание раздела администратора, через который пользователи смогут добавлять, изменять и удалять данные — утомительная работа. Она не требует творческого подхода. По этой причине Django полностью автоматизирует создание раздела администратора на основе моделей.
Django разрабатывался с упором на разделение сайта на две части: редактирование контента и просмотр контента. В этом уроке мы разберем работу с Django Admin, который администраторы сайта используют, чтобы добавлять контент на сайт. И он будет отображаться для всех посетителей сайта. Django Admin не предназначен для использования обычными посетителями, это место для управления сайтом.
Создание суперпользователя
Если мы посмотрим на наш главный файл urls.py, то увидим, что по умолчанию раздел администратора у нас подключен:
urlpatterns = [
# ...
path('admin/', admin.site.urls),
]
Если перейти по данному адресу, откроется страница для входа в раздел администратора:
Чтобы войти в раздел администратора, нам необходимо иметь учетную запись пользователя со статусом Staff. Мы можем создать учетную запись superuser, у которой есть полный доступ к сайту и все необходимые разрешения. Для этого выполним следующую команду и заполним информацию о себе:
python manage.py createsuperuser
Username: admin
Email address: admin@example.com
Password: **********
Password (again): **********
Superuser created successfully.
Теперь мы можем зайти в админку под созданной учетной записью:
В этом разделе мы видим все наши модели, которые сгруппированы по установленному приложению. Пока мы видим несколько типов редактируемого контента: группы и пользователи. Они предоставляются django.contrib.auth
платформой аутентификации, которая поставляется Django.
Регистрация моделей
Чтобы добавить в админку наши модели для редактирования, нам нужно отредактировать файл admin.py. Он расположен внутри приложения:
from django.contrib import admin
from .models import Article
admin.site.register(Article)
Мы зарегистрировали нашу модель в админке, и при обновлении страницы у нас появится новый раздел:
Теперь через новый раздел мы можем управлять данными в модели: добавлять, редактировать и удалять. Но если откроем список статей, увидим следующие названия:
Такие названия задаются методом __str__
, который по умолчанию состоит из названия класса и id записи в базе данных. Чтобы привести данный список к более читаемому и понятному виду, нам нужно в классе модели переопределить данный метод:
class Article(models.Model):
name = models.CharField(max_length=200)
body = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
В данном примере мы указываем, что в качестве названия объекта нужно возвращать значение поля name
. Так в качестве названия мы можем использовать любые поля, их комбинации или брать поля из связанных моделей. Теперь наш список будет выглядеть более читаемым для человека:
Настройка отображения
Возможности 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:
Мы можем улучшить читаемость нашего кода, если воспользуемся декоратором @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),) # Перечисляем поля для фильтрации
Кроме этого мы можем настраивать разделение на секции, выделять подробное представление, работать со связанными записями, управлять отображением полей.
Django Admin — мощный инструмент, с помощью которого можно автоматизировать создание административной части сайта, просмотра, обновления и удаления записей. Это позволяет сэкономить много времени в процессе разработки и упростить тестирование моделей.
Самостоятельная работа
- Выполните все шаги из теории
- Попробуйте добавить, изменить и удалить данные через раздел администратора
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.