Измените шрифт / цвет для поля в интерфейсе администратора django, если выражение True

в представлении списка изменений в интерфейсе администратора django можно ли отметить некоторые поля/строки красным цветом, если они достигают выражения?

например, если есть модель Group с members и capacity, Как я могу визуализировать, когда они полное или переполненный?

3 ответов


для изменения, как и что отображается в представлении списка изменений, можно использовать list_display на ModelAdmin.

имейте в виду, столбцы, приведенные в list_display это не реальные поля базы данных, которые нельзя использовать для сортировки, поэтому нужно дать администратору Django подсказку о том, какое поле базы данных фактически использовать для сортировки.

Это можно сделать, установив admin_order_field атрибут вызываемого, используемый для обертывания некоторого значения в HTML для образец.

пример из документов Django для красочных полей:

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    color_code = models.CharField(max_length=6)

    def colored_first_name(self):
        return '<span style="color: #%s;">%s</span>' % (
                             self.color_code, self.first_name)
    colored_first_name.allow_tags = True
    colored_first_name.admin_order_field = 'first_name'

class PersonAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'colored_first_name')

Я надеюсь, что это помогает.


кроме того, вы можете использовать

colored_first_name.short_description = 'first name'

для хорошего заголовка столбца


Это старый вопрос, но я добавлю пример из Docs для Django 1.10, потому что allow_tags атрибут, используемый в принятом ответе, устарел с Django 1.9 и рекомендуется использовать format_html вместо:

from django.db import models
from django.contrib import admin
from django.utils.html import format_html

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    color_code = models.CharField(max_length=6)

    def colored_name(self):
        return format_html(
            '<span style="color: #{};">{} {}</span>',
            self.color_code,
            self.first_name,
            self.last_name,
        )

class PersonAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name', 'colored_name')