Reportlab:在reportlab中为表格列动态设置颜色(颜色存储在django模型中)

5 投票
1 回答
5198 浏览
提问于 2025-04-17 06:27

我有一个叫做 TestResults 的 Django 模型。

models.py

Class TestResults(models)

   chemical_name charfield
   value    floatfield
   unit  charfield
   method  charfield
   normal_limit charfield
   caution_limit charfield
   color charfield

现在,

下面的代码会生成一个关于油的表格,这个表格有以下几个字段。

views.py

 fields = ('Test Name', 'Value', 'Unit', 'Method',
           'Normal Limit', 'Caution Limit')
 all_oils = [(test.chemical_name, test.value, test.unit, test.method,
                 test.normal_limit, test.caution_limit)
                 for test in TestResult.objects.all())]
oil_table = Table([fields] + all_oils
oil_table.setStyle(TableStyle([('BACKGROUND', (0, 0), (-1, 0), '#a7a5a5'),
                              ('FONTSIZE', (0, 0), (-1, 0), 6),
                              ('GRID', (0, 0), (-1, -1), 2, '#a7a5a5'),
                              ('FONTSIZE', (0, 0), (-1, -1), 8),
                              ('FONTNAME',(1,1),(1,-1),'Times-Bold')]))

那么,我该如何为每一列提供动态颜色呢?假设我的 TestResult 模型里有一个颜色字段(比如说 color=red)。

在报告中,我想要第二列的颜色是动态的,这个颜色是从模型对象中获取的。

我该如何实现这个呢?

1 个回答

3

也许我漏掉了什么,但这看起来真的很简单。

在你的对象里,存储你想要的颜色,可以用一个变量,比如叫 color,并且这个颜色要符合ReportLab的颜色规范(比如用十六进制的颜色值字符串)。然后在你生成报告的时候,如果想设置背景颜色,只需要为这一列的所有单元格设置就行了。例如,要设置 x 列的背景颜色,可以在你的 TableStyle 中添加以下内容:

('BACKGROUND', (x, 0), (x, -1), anObject.color)

TableStyle 中,你可以添加任意数量的 'BACKGROUND' 样式,所以你可以对每一列想要改变颜色的地方都这样做。

撰写回答