从其他列计算一个列 django-tables2

2 投票
1 回答
1314 浏览
提问于 2025-04-17 20:32

在使用 django-tables2 这个应用时,我想要添加一个额外的列,这个列并不是直接从数据库中来的,而是根据其他列计算出来的。举个简单的例子,我有一个模型:

#models.py
class AddSub(models.Model)

    num1 = models.DecimalField(max_digits=6, decimal_places=2)
    num2 = models.DecimalField(max_digits=6, decimal_places=2)
    op = models.CharField(max_length=3)

我的模型基本上有三列,前两列是数字,第三列是要执行的操作,可以是 'SUB'(减法)或者 'ADD'(加法)。比如:

num1 |num2| op
1.01  5.67  'ADD'
87.3  23.4  'SUB'
.
.
.

假设我想要一个第四列,这一列是根据前面三列计算出来的,简单来说,如果操作是 'ADD' 就把前两列的数字加起来,如果是 'SUB' 就把它们相减。

最后,我有了我的表格:

class CalcTable(tables.Table)
    num1 = tables.Column(verbose_name='Operand 1')
    num2 = tables.Column(verbose_name='Operand 2')
    operation = tables.Column(verbose_name='Operation')
    result = tables.Column(verbose_name='The Result')

我该如何让 django-tables2 填充我的结果列呢?是通过 render 吗?也许可以这样做:

def render_result(self, value, record):
   #add up 

但是我尝试这样做却失败了。实际上,就算我只是返回一个常数,比如 return 3.0,我的第四列也还是空的。

1 个回答

3

如果你添加了一个新列,并且使用 render 方法来填充这个列的数据,那么在定义这个列的时候,你需要加上 empty_values 属性。

 result = tables.Column(verbose_name='The Result', empty_values=())

相关文档

撰写回答