Админ-панель в Django — это мощный инструмент, предоставляющий разработчикам удобный интерфейс для управления моделями данных и их содержимым. По умолчанию она имеет простой и функциональный дизайн, но при желании её можно настроить в соответствии со своими предпочтениями и требованиями проекта.
Обзор возможностей кастомизации
Django предлагает множество способов кастомизации админ-панели, включая:
- Изменение заголовков и меток
- Настройка списка полей модели
- Добавление фильтров и поиска
- Создание пользовательских действий
- Определение порядка сортировки
- Изменение шаблонов и стилей
В этом руководстве мы рассмотрим различные методы настройки внешнего вида админ-панели Django.
Изменение заголовков и меток
Одна из наиболее распространённых задач при кастомизации — изменение заголовков и меток, отображаемых в админ-панели. Для этого необходимо переопределить метакласс модели и указать нужные значения.
Например, для изменения заголовка модели Product
и метки поля name
можно использовать следующий код:
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
class Meta:
verbose_name = "Товар"
verbose_name_plural = "Товары"
def __str__(self):
return self.name
class Meta:
verbose_name = "Товар"
verbose_name_plural = "Товары"
ordering = ["name"]
Настройка списка полей модели
В админ-панели Django можно настроить, какие поля модели будут отображаться в списке и в каком порядке. Для этого используется атрибут list_display
в классе ModelAdmin
.
from django.contrib import admin
class ProductAdmin(admin.ModelAdmin):
list_display = ("name", "description", "price")
admin.site.register(Product, ProductAdmin)
В приведённом примере в списке моделей Product
будут отображаться поля name
, description
и price
.
Добавление фильтров и поиска
Фильтры и поиск значительно облегчают навигацию по большим наборам данных в админ-панели. Для добавления фильтров используется атрибут list_filter
, а для поиска — search_fields
.
from django.contrib import admin
class ProductAdmin(admin.ModelAdmin):
list_display = ("name", "description", "price")
list_filter = ("category",)
search_fields = ("name", "description")
admin.site.register(Product, ProductAdmin)
В этом примере для модели Product
добавлен фильтр по полю category
и возможность поиска по полям name
и description
.
Создание пользовательских действий
Django позволяет создавать пользовательские действия для выполнения определённых операций над выбранными объектами модели. Для этого необходимо определить функцию действия и добавить её в атрибут actions
класса ModelAdmin
.
from django.contrib import admin
from django.utils.translation import ngettext
def duplicate_products(modeladmin, request, queryset):
for product in queryset:
product.id = None
product.save()
count = queryset.count()
ngettext(
"Продублирован %d товар.",
"Продублировано %d товаров.",
count,
) % count
duplicate_products.short_description = "Дублировать выбранные товары"
class ProductAdmin(admin.ModelAdmin):
list_display = ("name", "description", "price")
actions = [duplicate_products]
admin.site.register(Product, ProductAdmin)
В этом примере определено действие duplicate_products
, которое создаёт дубликаты выбранных объектов модели Product
. Действие добавлено в атрибут actions
класса ProductAdmin
.
Определение порядка сортировки
Порядок сортировки объектов модели в админ-панели можно задать с помощью атрибута ordering
в метаклассе модели или в классе ModelAdmin
.
from django.contrib import admin
class ProductAdmin(admin.ModelAdmin):
list_display = ("name", "description", "price")
ordering = ["-price", "name"]
admin.site.register(Product, ProductAdmin)
В этом примере объекты модели Product
будут сортироваться по убыванию цены (-price
), а при одинаковых ценах — по названию в алфавитном порядке (name
).
Изменение шаблонов и стилей
Для более глубокой кастомизации внешнего вида админ-панели можно переопределить шаблоны и стили, используемые по умолчанию. Это позволяет изменить расположение элементов, цвета, шрифты и многое другое.
Для переопределения шаблона необходимо создать директорию templates
в корневой директории проекта и скопировать в неё нужный шаблон из директории django/contrib/admin/templates
. После этого можно внести необходимые изменения в скопированный шаблон.
Для изменения стилей следует создать файл admin.css
в директории static
проекта и добавить в него нужные стили. Затем необходимо подключить этот файл в шаблоне админ-панели.