如何在 django tables2 render_* 中使用 super

how use super in django tables2 render_*

我创建新列并添加自定义呈现如下

class PriceColumn(django_tables2.Column):
    def render(self, value):
        if isinstance(value, int) or isinstance(value, float):
            self.attrs['td']['title'] = f'{round(value, 2):,}'
            return number_convertor_to_milion(value)
        return '---

然后我将它用于字段

weekly_returns = PriceColumn(verbose_name=_('Weekly Returns'))

def render_weekly_returns(self, value,**kwargs):
    final_result = value*100
    // i want to call super().render() like below
    return super().render(final_result,**kwargs)

我想按照编写的代码调用 super 但出现错误

AttributeError: 'super' object has no attribute 'render'

如何做到这一点?

在您的例子中,super() 指的是它所在的 class,即 MyTable(tables.Table) class,而不是预期的 PriceColumn(Column) class.

您可以通过以下两种方式之一修复,直接调用 Class 方法;

def render_weekly_returns(self, value,**kwargs):
    final_result = value*100
    return PriceColumn.render(final_result,**kwargs)

或者我可能会建议将 return 方法说明添加到您的 render_weekly_returns() 方法中,因为它将来会更容易阅读。

def render_weekly_returns(self, value,**kwargs):
    final_result = value*100
    if isinstance(final_result, int) or isinstance(final_result, float):
        self.attrs['td']['title'] = f'{round(final_result, 2):,}'
        return number_convertor_to_milion(final_result)
    return '---'