Измените шрифт / цвет для поля в интерфейсе администратора django, если выражение истинно - PullRequest
6 голосов
/ 09 августа 2010

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

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

Ответы [ 3 ]

9 голосов
/ 10 августа 2010

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

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

Это делается путем установки admin_order_fieldнапример, атрибут callable, используемый для переноса некоторого значения в 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')

Надеюсь, что это поможет.

2 голосов
/ 01 октября 2016

Это старый вопрос, но я добавлю пример из документации для 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')
2 голосов
/ 04 июля 2013

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

colored_first_name.short_description = 'first name'

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

...