Метод message_user
Метод message_user применяется к экземпляру класса ModelAdmin и позволяет отправлять сообщения пользователю в интерфейсе администратора. Сообщения отображаются в верхней части страницы после выполнения какого-либо действия. Метод использует систему сообщений Django и поддерживает различные уровни важности.
Параметры метода message_user:
- ⁅b⁆message⁅/b⁆ - текст сообщения, который будет отображен пользователю;
-
⁅b⁆level⁅/b⁆ - уровень важности сообщения:
'INFO','SUCCESS','WARNING','ERROR'или соответствующие константы изmessages(по умолчанию'INFO'); - ⁅b⁆extra_tags⁅/b⁆ - дополнительные CSS-классы для кастомизации отображения сообщения (необязательный параметр);
-
⁅b⁆fail_silently⁅/b⁆ - если
True, подавляет исключения при отправке сообщения (по умолчаниюFalse).
Синтаксис
self.message_user(request, message, level='INFO', extra_tags='', fail_silently=False)
Пример
Рассмотрим простой пример использования message_user в кастомном действии администратора:
from django.contrib import admin
from django.contrib import messages
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
list_display = ['title', 'status']
@admin.action(description='Mark selected articles as published')
def make_published(self, request, queryset):
count = queryset.update(status='published')
self.message_user(
request,
f'Successfully published {count} articles.',
messages.SUCCESS
)
После выполнения действия пользователь увидит сообщение об успешной операции:
"Successfully published 5 articles."
Пример
Пример использования message_user с разными уровнями важности в зависимости от результата операции:
from django.contrib import admin
from django.contrib import messages
from .models import Category
class CategoryAdmin(admin.ModelAdmin):
list_display = ['name', 'is_active']
def save_model(self, request, obj, form, change):
try:
obj.save()
if change:
self.message_user(
request,
f'Category "{obj.name}" successfully updated.',
messages.SUCCESS
)
else:
self.message_user(
request,
f'Category "{obj.name}" successfully created.',
messages.SUCCESS
)
except Exception as e:
self.message_user(
request,
f'Failed to save category: {str(e)}',
messages.ERROR
)
В случае ошибки пользователь увидит сообщение:
"Failed to save category: Duplicate entry 'technology' for key 'name'"
Пример
Использование message_user с дополнительными CSS-классами для кастомизации отображения:
from django.contrib import admin
from .models import UserProfile
class UserProfileAdmin(admin.ModelAdmin):
list_display = ['user', 'is_verified']
@admin.action(description='Verify selected users')
def verify_users(self, request, queryset):
verified = queryset.filter(is_verified=False)
count = verified.update(is_verified=True)
if count > 0:
self.message_user(
request,
f'{count} users were successfully verified.',
level='SUCCESS',
extra_tags='custom-success'
)
else:
self.message_user(
request,
'No unverified users found.',
level='WARNING',
extra_tags='custom-warning'
)
Результат выполнения действия без изменений:
"No unverified users found."
Смотрите также
-
метод
save_model,
который переопределяет сохранение модели в административном интерфейсе -
метод
delete_model,
который переопределяет удаление модели в административном интерфейсе -
метод
get_queryset,
который переопределяет набор объектов для отображения в админке -
атрибут
actions,
который определяет доступные действия в административном интерфейсе