首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有条件地更改django admin list_display中单元格的背景色

有条件地更改django admin list_display中单元格的背景色
EN

Stack Overflow用户
提问于 2016-10-28 01:33:43
回答 3查看 4.3K关注 0票数 3

希望找到一种优雅的方法来有条件地更改list_filter中单元格的背景色。如果我没有一个条件,它在一种状态下可以工作,但需要根据不同的状态改变背景的颜色。

django版本1.10,

python 3.5

Model.py

代码语言:javascript
复制
class PlayBook(TimeStampModel):

minor = 'MINOR'
normal = 'NORMAL'
important = 'IMPORTANT'
critical = 'CRITICAL'

SEVERITY = (
    (minor, 'Minor'),
    (normal, 'Normal'),
    (important, 'Important'),
    (critical, 'Critical'),
)

low = 'LOW'
high = 'HIGH'
PRIORITY = (
        (low, 'Low'),
        (normal, 'Normal'),
        (high, 'High'),
        )


new = 'New'
in_progress = 'In_Progress'
needs_info = 'Needs Info'
postponed = 'Postponed'
closed = 'Closed'
STATUS= (
        (new, 'New'),
        (in_progress, 'In Progress'),
        (needs_info, 'Needs Info'),
        (postponed, 'Postponed'),
        (closed, 'Closed'),

        )

subject = models.CharField(max_length=200, unique=True)
description = models.TextField(blank=True, help_text="Business purpose of the application")
manager = models.ForeignKey(User, on_delete=models.CASCADE)

severity = models.CharField(max_length = 100, choices=SEVERITY, default=normal)
priority = models.CharField(max_length = 100, choices=PRIORITY, default=normal)
status = models.CharField(max_length = 100, choices=STATUS, default=new)
def __str__(self):
    return "{}".format(self.subject)

class Meta:
    ordering = ('severity',)
@property
def short_description(self):
    return truncatechars(self.description, 35)

Admin.py

代码语言:javascript
复制
from django.utils.html import format_html

class PlayBookAdmin(admin.ModelAdmin):
    list_display =['severity','priority', 'subject', 'status_colored','created','updated', 'short_description']


def status_colored(self, obj):
    color = 'yellow'
    if obj.status == 'Closed':
        color = 'green'
        return format_html(

            '<b style="background:{};">{}</b>',
            color,
            obj.status
                       )
    elif obj.status =='In Progress':
        color = 'yellow'
        return format_html(

            '<b style="background:{};">{}</b>',
            color,
            obj.status
                       )

    else obj.status =='Needs Info':
        color = 'orange'
        return format_html(

            '<b style="background:{};">{}</b>',
            color,
            obj.status
                       )

  status_colored.admin_order_field = 'closed'


admin.site.register(PlayBook, PlayBookAdmin)

结果

代码语言:javascript
复制
    else obj.status =='Needs Info':
           ^
SyntaxError: invalid syntax

只有一个条件

工作正常。但我相信有一种更好的方法可以做到这一点。

代码语言:javascript
复制
from django.utils.html import format_html

class PlayBookAdmin(admin.ModelAdmin):
    list_display =['severity','priority', 'subject', 'status_colored','created','updated', 'short_description']


def status_colored(self, obj):
    color = 'yellow'
    if obj.status == 'Closed':
        color = 'green'
    return format_html(

            '<b style="background:{};">{}</b>',
            color,
            obj.status
                       )
status_colored.admin_order_field = 'closed'


admin.site.register(PlayBook, PlayBookAdmin)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-28 02:04:09

尝试如下所示:

代码语言:javascript
复制
def status_colored(self, obj):
    colors = {
        'Closed': 'green',
        'In Progress': 'yellow',
        'Needs Info': 'orange',
    }
    return format_html(
        '<b style="background:{};">{}</b>',
        colors[obj.status],
        obj.status,
    )
票数 6
EN

Stack Overflow用户

发布于 2020-07-30 06:31:44

我测试了文本颜色,而不是背景颜色:

代码语言:javascript
复制
def visited(self, obj):
    text = 'Not Visited'
    color = 'red'
    if obj.status== True:
        text = 'Visited'
        color = 'green'
    return format_html('<b style="color:{};">{}</b>',color,text,obj.status)

票数 2
EN

Stack Overflow用户

发布于 2018-09-20 07:30:59

我试过了,但这只是一段文字...对我来说都不是一个解决方案。

我最终在模板中使用Jinja解决了这个问题,在每一行都询问我想要填充的值。这可能不是最优雅的解决方案,但对我有帮助。

代码语言:javascript
复制
{% for row in cl.result_list %}
<tr class="{% cycle 'row1' 'row2' %}" {% if row.etapa == 50 %} style='background-color:#ffcccc' {% endif %} in>
    <td> {{ row.fecha }} </td>
    <td> {{ row.etapa }} </td>
    <td> {{ row.presion }} </td>
    <td> {{ row.tempin }} </td>
    <td>
</tr>{% endfor %}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40290898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档