Django Admin — встроенная панель управления для работы с данными через браузер.
Подключение модели
# admin.py
from django.contrib import admin
from .models import Task, Project
admin.site.register(Task)
admin.site.register(Project)
Теперь модели доступны по /admin/.
ModelAdmin — настройка отображения
@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):
list_display = ['title', 'status', 'owner', 'created_at']
list_filter = ['status', 'priority']
search_fields = ['title', 'owner__username']
ordering = ['-created_at']
date_hierarchy = 'created_at'
list_display и list_editable
@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):
list_display = ['title', 'status', 'priority']
list_editable = ['status', 'priority'] # редактирование прямо в списке
fieldsets — группировка полей
@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):
fieldsets = [
('Основное', {'fields': ['title', 'description']}),
('Параметры', {'fields': ['status', 'priority', 'owner', 'project']}),
('Даты', {'fields': ['due_date'], 'classes': ['collapse']}),
]
search_fields и list_filter
search_fields — полнотекстовый поиск по указанным полям. Поддерживает обращение через связи (owner__username). Django добавляет LIKE запрос к каждому полю.
list_filter — боковая панель с фильтрами. Работает с полями-выборками, булевыми полями, ForeignKey и датами.
@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):
search_fields = ['title', 'description', 'owner__email']
list_filter = ['status', 'priority', 'project', 'created_at']
readonly_fields
Поля только для чтения — показываются на странице редактирования, но не принимают ввод:
@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):
readonly_fields = ['created_at', 'updated_at', 'slug']
fieldsets = [
('Основное', {'fields': ['title', 'description']}),
('Служебное', {'fields': ['slug', 'created_at', 'updated_at']}),
]
Полезно для автогенерируемых полей, которые не должны редактироваться вручную.
Кастомные действия (actions)
Действия применяются к выбранным объектам в списке. Пример — массовая смена статуса:
@admin.action(description='Отметить как выполненные')
def mark_done(modeladmin, request, queryset):
queryset.update(status='done')
@admin.action(description='Отметить как отменённые')
def mark_cancelled(modeladmin, request, queryset):
queryset.update(status='cancelled')
@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):
list_display = ['title', 'status']
actions = [mark_done, mark_cancelled]
После регистрации действия появляются в выпадающем меню над списком объектов. Пользователь выбирает нужные строки, выбирает действие и нажимает «Выполнить».
save_model — перехват сохранения
save_model вызывается при сохранении объекта через Admin. Позволяет добавить логику: проставить автора, отправить уведомление, записать лог:
@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
if not change:
# Новый объект — проставить владельца
obj.owner = request.user
super().save_model(request, obj, form, change)
Параметр change: False — создание нового объекта, True — редактирование существующего.
Создание суперпользователя
python manage.py createsuperuser
Затем открой /admin/ и войди с созданными данными.
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!