Атрибут list_display
Атрибут list_display применяется к классу ModelAdmin
и определяет, какие поля модели будут отображаться в виде колонок
на странице списка объектов в административной панели. В качестве
значений можно указывать имена полей модели, методы модели или
вызываемые объекты. Атрибут позволяет гибко настраивать отображение
данных, включая возможность отображения вычисляемых значений
и форматирования вывода.
Синтаксис
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ['field1', 'field2', 'method_name']
Пример
Давайте создадим модель Article и настроим административную
панель для отображения полей title, author и
created_at в списке объектов:
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
created_at = models.DateTimeField(auto_now_add=True)
status = models.CharField(max_length=20)
def __str__(self):
return self.title
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ['title', 'author', 'created_at']
Результат выполнения кода:
"В списке объектов будут показаны колонки: title, author, created_at"
Пример
Давайте используем метод модели в атрибуте list_display
для отображения пользовательского форматирования:
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
is_published = models.BooleanField(default=False)
def status_display(self):
return "Published" if self.is_published else "Draft"
status_display.short_description = "Status"
def __str__(self):
return self.title
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ['title', 'status_display', 'is_published']
Результат выполнения кода:
"Вместо булевого значения будет отображаться текст: Published или Draft"
Пример
Давайте используем вызываемый объект с декоратором admin.display
для управления отображением поля в административной панели:
from django.contrib import admin
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
price = models.DecimalField(max_digits=10, decimal_places=2)
def __str__(self):
return self.title
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ['title', 'price_with_currency']
@admin.display(description='Price with currency')
def price_with_currency(self, obj):
return f"${obj.price}"
Результат выполнения кода:
"В столбце price_with_currency будет отображаться цена с символом доллара: $99.99"
Пример
Давайте используем атрибут list_display с полями из связанных
моделей через двойное подчеркивание:
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Article(models.Model):
title = models.CharField(max_length=100)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
def __str__(self):
return self.title
from django.contrib import admin
from .models import Article, Category
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ['title', 'category__name', 'id']
Результат выполнения кода:
"Вместо идентификатора категории будет отображаться её название: category__name"
Смотрите также
-
атрибут
list_filter,
который добавляет фильтры для списка объектов в админке -
атрибут
search_fields,
который добавляет поле поиска для списка объектов -
декоратор
admin.display,
который используется для настройки отображения методов в админке -
атрибут
list_editable,
который позволяет редактировать поля прямо в списке объектов