РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
609 of 818 menu

Декоратор admin.display

Декоратор admin.display применяется к методам модели или методам, определенным в классе административной панели. Он используется в связке с атрибутом list_display для тонкой настройки отображения данных. Декоратор позволяет задать несколько параметров: description, ordering, empty_value, boolean и цветовые стили. Основное назначение - сделать административную панель более информативной и удобной для пользователей.

Синтаксис

@admin.display( description="Custom Header", ordering="field_name", empty_value="-", boolean=True, ) def method_name(self, obj): return obj.some_value

Декоратор принимает следующие параметры:

description - задает заголовок колонки в таблице админки. Если не указан, используется имя метода.

ordering - указывает поле модели, по которому будет производиться сортировка при клике на заголовок колонки.

empty_value - задает строку, которая будет отображаться, если метод возвращает пустое значение или None.

boolean - если установлен в True, отображает значение в виде иконки галочки или крестика для булевых значений.

Пример . С моделью Article

Рассмотрим модель статьи, в которой есть метод для отображения статуса публикации:

from django.db import models from django.contrib import admin class Article(models.Model): title = models.CharField(max_length=100) content = models.TextField() is_published = models.BooleanField(default=False) published_at = models.DateTimeField(null=True, blank=True) @admin.display( description="Status", ordering="published_at", empty_value="Not published" ) def get_publish_status(self): if self.is_published: return f"Published at {self.published_at.strftime('%Y-%m-%d')}" return "Draft" @admin.display(boolean=True) def is_ready(self): return self.is_published

В классе административной панели добавим эти методы в список отображаемых полей:

from django.contrib import admin from .models import Article @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = ['title', 'get_publish_status', 'is_ready'] list_filter = ['is_published'] search_fields = ['title']

В результате в админке появятся две дополнительные колонки:

"Title: My First Article, Status: Published at 2025-01-15, is_ready: True" "Title: Draft Article, Status: Not published, is_ready: False"

Пример . С параметром ordering

Параметр ordering позволяет сортировать записи по полю, указанному в качестве значения. Рассмотрим пример с сортировкой по дате создания:

from django.db import models from django.contrib import admin class Product(models.Model): name = models.CharField(max_length=100) created_at = models.DateTimeField(auto_now_add=True) price = models.DecimalField(max_digits=10, decimal_places=2) @admin.display( description="Product Info", ordering="created_at" ) def get_product_info(self): return f"{self.name} (${self.price})"

Теперь при клике на заголовок колонки "Product Info" записи будут сортироваться по полю created_at:

from django.contrib import admin from .models import Product @admin.register(Product) class ProductAdmin(admin.ModelAdmin): list_display = ['name', 'get_product_info'] ordering = ['-created_at']

Пример . С параметром empty_value

Параметр empty_value определяет, что будет отображаться, если метод возвращает пустое значение. Рассмотрим пример с пользователями:

from django.db import models from django.contrib import admin class UserProfile(models.Model): username = models.CharField(max_length=50) first_name = models.CharField(max_length=50, blank=True) last_name = models.CharField(max_length=50, blank=True) @admin.display( description="Full Name", empty_value="Anonymous" ) def get_full_name(self): if self.first_name and self.last_name: return f"{self.first_name} {self.last_name}" return None

Теперь если у пользователя не заполнены имя и фамилия, в колонке будет отображаться строка "Anonymous":

from django.contrib import admin from .models import UserProfile @admin.register(UserProfile) class UserProfileAdmin(admin.ModelAdmin): list_display = ['username', 'get_full_name'] search_fields = ['username']

Пример . С параметром boolean

Параметр boolean используется для отображения булевых значений в виде иконок. Рассмотрим пример с задачей:

from django.db import models from django.contrib import admin class Task(models.Model): title = models.CharField(max_length=100) is_completed = models.BooleanField(default=False) is_urgent = models.BooleanField(default=False) @admin.display(boolean=True) def is_done(self): return self.is_completed @admin.display(boolean=True) def is_important(self): return self.is_urgent

В админке эти методы будут отображаться как иконки галочки или крестика:

from django.contrib import admin from .models import Task @admin.register(Task) class TaskAdmin(admin.ModelAdmin): list_display = ['title', 'is_done', 'is_important'] list_filter = ['is_completed', 'is_urgent']

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

  • декоратор admin.register,
    который регистрирует модель в административной панели
  • атрибут list_display,
    который определяет поля для отображения в списке объектов
  • атрибут readonly_fields,
    который делает поля доступными только для чтения
  • декоратор admin.action,
    который определяет кастомные действия для выбранных объектов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить