django admin:根据内容更改单元格值颜色
django admin: change cell value color depending on content
我正在使用 django admin,我想更改 "estado_material" 字段值的字体颜色,如果它们可用 "Disponible" 或不可用 "En préstamo"。我的 models.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"
和我的 admin.py:
from django.contrib import admin
from django.forms import TextInput, Textarea
from django.db import models
from coleccion.models import Material,
class MaterialAdmin(admin.ModelAdmin):
list_display = ('num_com', 'identificacion', 'descripcion','ubicacion', 'estado_material')
search_fields = ('num_com', 'identificacion', 'descripcion','ubicacion')
formfield_overrides = {
models.CharField: {'widget': TextInput(attrs={'size':'40'})},
models.TextField: {'widget': Textarea(attrs={'rows':4, 'cols':80})},
}
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
就足够了。
我正在使用 django admin,我想更改 "estado_material" 字段值的字体颜色,如果它们可用 "Disponible" 或不可用 "En préstamo"。我的 models.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"
和我的 admin.py:
from django.contrib import admin
from django.forms import TextInput, Textarea
from django.db import models
from coleccion.models import Material,
class MaterialAdmin(admin.ModelAdmin):
list_display = ('num_com', 'identificacion', 'descripcion','ubicacion', 'estado_material')
search_fields = ('num_com', 'identificacion', 'descripcion','ubicacion')
formfield_overrides = {
models.CharField: {'widget': TextInput(attrs={'size':'40'})},
models.TextField: {'widget': Textarea(attrs={'rows':4, 'cols':80})},
}
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
就足够了。