Административная панель Django — это один из самых мощных встроенных инструментов фреймворка. Она создаёт удобный интерфейс для управления данными сайта: моделями, записями, связями, пользователями.
В этом уроке мы научимся подключать админ-панель, создавать суперпользователя, регистрировать модели нашего проекта cinemahub, а также настраивать отображение приложений и моделей.
Когда вы создаёте новый проект Django, административная панель уже настроена и включена:
- в
settings.pyприложениеdjango.contrib.adminуже присутствует в спискеINSTALLED_APPS, - в
urls.pyсоздан маршрут/admin/.
Чтобы убедиться, можно открыть:
cinemahub_project/settings.py → INSTALLED_APPS
Вы увидите:
'django.contrib.admin',А затем в cinemahub_project/urls.py:
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]Это уже означает, что вы можете открыть админку в браузере.
Запустите сервер:
python manage.py runserverОткройте в браузере:
http://127.0.0.1:8000/admin/
Если всё настроено правильно, появится форма ввода логина и пароля.
Если видите ошибку — это важно:
- ModuleNotFoundError: No module named 'django.contrib.admin' — кто-то случайно удалил модуль из INSTALLED_APPS.
- Page not found (404) — вы могли изменить маршрут в urls или удалить
admin.site.urls. - ImproperlyConfigured — ошибка в настройках проекта.
По умолчанию Django загружает английский интерфейс.
Для русскоязычного курса мы переключим его на русский.
Откройте settings.py и найдите:
LANGUAGE_CODE = 'en-us'Замените на:
LANGUAGE_CODE = 'ru-RU'Перезапустите сервер и обновите страницу /admin/.
Теперь интерфейс будет полностью на русском.
Чтобы войти в админ-панель, нужен суперпользователь — учётная запись с максимальными правами.
Создаём его командой:
python manage.py createsuperuserДалее Django предложит заполнить поля:
- Имя пользователя: например,
root - Email:
root@cinemahub.local - Пароль:
1234(В реальных проектах — только сложные пароли)
После успешного создания попробуйте войти в /admin/ под этими данными.
Если при создании видите предупреждение:
This password is too common
— Django предупреждает, что пароль небезопасный.
Для учебного проекта это допустимо, подтверждайте y.
После входа вы увидите два блока:
- Пользователи
- Группы
Это встроенные модели Django.
Однако наши модели cinemahub пока нигде не отображаются — мы их ещё не зарегистрировали.
Предположим, что в нашем приложении movies (часть проекта cinemahub) существует модель Movie:
# movies/models.py
from django.db import models
class Movie(models.Model):
title = models.CharField(max_length=255)
description = models.TextField()
year = models.PositiveIntegerField()
def __str__(self):
return self.titleОткройте файл:
movies/admin.py
и добавьте:
from django.contrib import admin
from .models import Movie
admin.site.register(Movie)- Перезагрузите страницу
/admin/. - Убедитесь, что появилось приложение Movies и внутри — модель Movies.
Если видите ошибку:
Model class movies.models.Movie doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
→ значит приложение movies не добавлено в INSTALLED_APPS.
Чтобы админ-панель выглядела более профессионально, настроим имя модели.
Добавим метаданные:
class Movie(models.Model):
title = models.CharField(max_length=255)
description = models.TextField()
year = models.PositiveIntegerField()
class Meta:
verbose_name = "Фильм"
verbose_name_plural = "Фильмы"
def __str__(self):
return self.titleТеперь в админке вместо Movies будут:
- Фильм
- Фильмы
Обновите страницу /admin/ и проверьте.
В Django каждая модель может содержать специальный вложенный класс Meta.
Он не хранит данные и не добавляет полей в таблицу — его задача описывать служебную (метаданную) информацию о модели, то есть правила, по которым Django должен работать с этой моделью.
Можно представить Meta как «файл настроек» для конкретной модели.
Наиболее распространённые параметры:
-
verbose_name / verbose_name_plural Красивые названия модели в админ-панели.
-
ordering Сортировка записей по умолчанию. Например:
ordering = ['title']
-
db_table Явное указание имени таблицы в базе данных.
-
permissions Добавление пользовательских прав доступа.
-
unique_together / constraints Ограничения уникальности на уровне базы данных.
-
indexes Создание дополнительных индексов.
class Movie(models.Model):
title = models.CharField(max_length=255)
year = models.PositiveIntegerField()
class Meta:
verbose_name = "Фильм"
verbose_name_plural = "Фильмы"
ordering = ['-year']- Для удобного отображения в админ-панели.
- Для правильной сортировки данных по умолчанию.
- Для соблюдения бизнес-правил.
- Для оптимизации запросов.
- Для контроля структуры базы данных.
Без класса Meta все эти настройки пришлось бы указывать вручную в разных местах — поэтому Django хранит их компактно внутри модели.
Когда есть много приложений, важно, чтобы их названия были читаемыми.
Откройте:
movies/apps.py
и измените:
from django.apps import AppConfig
class MoviesConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'movies'
verbose_name = 'Фильмотека'Теперь в админке блок будет называться Фильмотека.
Если после изменения видите ошибку:
AppRegistryNotReady: Apps aren't loaded yet.
→ Вы забыли перезапустить сервер.
- Создайте новую модель
Genreс одним полемname. - Зарегистрируйте её в админке.
- Настройте ей
verbose_name/verbose_name_plural. - Проверьте, что модель отображается корректно.
- Измените название приложения
moviesна «Каталог кино». - Проверьте, что это название отображается в админ-панели.
- Попробуйте создать запись в новой модели
Genre.
- Создайте нового суперпользователя.
- Войдите под ним в админ-панель.
- Создайте 3 записи модели
Movie. - Выйдите и войдите снова под предыдущим пользователем.
Смоделируйте ситуации:
- Удалите регистрацию модели из
admin.py→ Проверьте, исчезла ли модель. - Удалите приложение
moviesизINSTALLED_APPS→ Запустите сервер и разберите ошибку. - Верните всё обратно.
- Почему административная панель Django включена по умолчанию?
- Для чего нужен суперпользователь?
- Где находится маршрут к админ-панели и как его изменить?
- Что произойдёт, если модель не зарегистрировать в
admin.py? - Какие ошибки могут возникнуть, если забыть добавить приложение в
INSTALLED_APPS? - Зачем указывать
verbose_nameиverbose_name_plural? - Что делает метод
__str__()в модели? - Где находится файл, отвечающий за название приложения?
- Можно ли изменить язык админ-панели без изменения LANGUAGE_CODE?
- Почему важно проверять изменения сразу в браузере?