Метод message_user

Метод message_user применяется к экземпляру класса ModelAdmin и позволяет отправлять сообщения пользователю в интерфейсе администратора. Сообщения отображаются в верхней части страницы после выполнения какого-либо действия. Метод использует систему сообщений Django и поддерживает различные уровни важности.

Параметры метода message_user:

Синтаксис

pythonself.message_user(request, message, level='INFO', extra_tags='', fail_silently=False)

Пример

Рассмотрим простой пример использования message_user в кастомном действии администратора:

pythonfrom 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
    )

После выполнения действия пользователь увидит сообщение об успешной операции:

python"Successfully published 5 articles."

Пример

Пример использования message_user с разными уровнями важности в зависимости от результата операции:

pythonfrom 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
      )

В случае ошибки пользователь увидит сообщение:

python"Failed to save category: Duplicate entry 'technology' for key 'name'"

Пример

Использование message_user с дополнительными CSS-классами для кастомизации отображения:

pythonfrom 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'
      )

Результат выполнения действия без изменений:

python"No unverified users found."

Смотрите также

  • метод save_model,
    который переопределяет сохранение модели в административном интерфейсе
  • метод delete_model,
    который переопределяет удаление модели в административном интерфейсе
  • метод get_queryset,
    который переопределяет набор объектов для отображения в админке
  • атрибут actions,
    который определяет доступные действия в административном интерфейсе