django admin:根据内容更改单元格值颜色

时间:2016-01-21 23:41:34

标签: python django django-admin admin

我正在使用django admin,我想更改“estado_material”字段值的字体颜色,如果它们可用“Disponible”或不是“Enpréstamo”。我的models.py:

ScaleTransisition

和我的admin.py:

from django.db import models

class Material(models.Model):
    identificacion=models.CharField(max_length=30, verbose_name='Identificación del material')
    num_com=models.CharField(max_length=30, verbose_name='Número')
    nombre_sp=models.CharField(max_length=30, verbose_name='Nombre científico')
    coleccion=models.CharField(max_length=30, verbose_name='Colección')
    descripcion=models.CharField(max_length=1000, verbose_name='Descripción')
    localidad=models.CharField(max_length=30, verbose_name='Localidad')
    estratigrafia=models.CharField(max_length=1000, verbose_name='Estratigrafía')
    colector=models.CharField(max_length=130, verbose_name='Colector/es')
    observaciones=models.CharField(max_length=1000, verbose_name='Observación')
    ubicacion=models.CharField(max_length=130, verbose_name='Ubicación')
    class Meta:
         verbose_name = "Material"
         verbose_name_plural = "Materiales"

    def __str__(self):
        return self.num_com

    def estado_material(self):
        if Prestamos.objects.filter(material__num_com=self.num_com).exists():
            return "En préstamo"
        else:
            return "Disponible"

1 个答案:

答案 0 :(得分:0)

estado_material可以使用django.utils.html中的format_html方法更改为以下内容:

from django.utils.html import format_html
...
    def estado_material(self):
        if Prestamos.objects.filter(material__num_com=self.num_com).exists():
            result = "En préstamo"
        else:
            result = "Disponible"
        return format_html('<span style="color: {};">{}</span>',
                       'green' if  result == 'Disponible' else 'red',
                       result)

可以将Django 1.9 allow_tags属性添加到方法中以防止自动转义 - 现在已弃用,format_html就足够了。