Django - 覆盖django-tables2 LinkColumn的数据内容

时间:2013-04-24 17:40:50

标签: python django django-forms django-tables2

我使用django-tables2 LinkColumn创建一个列,该列调用一个允许在表中导出对象的函数。

forms.py:

class FilesTable(tables.Table):
    id = tables.LinkColumn('downloadFile', args=[A('pk')], verbose_name='Export')

我希望这个列的内容是下载文件功能的href:导出为文本,而不是id。

2 个答案:

答案 0 :(得分:4)

这样的东西应该正常工作(警告我这里没有Python所以它没有经过测试,但你会明白的):

class CustomTextLinkColumn(LinkColumn):
  def __init__(self, viewname, urlconf=None, args=None, 
    kwargs=None, current_app=None, attrs=None, custom_text=None, **extra):
    super(CustomTextLinkColumn, self).__init__(viewname, urlconf=urlconf, 
      args=args, kwargs=kwargs, current_app=current_app, attrs=attrs, **extra)
    self.custom_text = custom_text


  def render(self, value, record, bound_column):
    return super(CustomTextLinkColumn, self).render(self, 
      self.custom_text if self.custom_text else value, 
      record, bound_column)    

然后你可以像

一样使用它
id = CustomTextLinkColumn('downloadFile', args=[A('pk')], 
  custom_text='Export', verbose_name='Export', )

当然你总是可以使用TemplateColumn或者将render_id方法添加到FilesTable中,但是CustomTextLinkColumn绝对是最干的方法:)

答案 1 :(得分:3)

我无法评论,所以我需要添加另一个答案。我将更正“render”调用在参数列表中不应该有“self”。

class CustomTextLinkColumn(LinkColumn):
  def __init__(self, viewname, urlconf=None, args=None, 
    kwargs=None, current_app=None, attrs=None, custom_text=None, **extra):
    super(CustomTextLinkColumn, self).__init__(viewname, urlconf=urlconf, 
      args=args, kwargs=kwargs, current_app=current_app, attrs=attrs, **extra)
    self.custom_text = custom_text


  def render(self, value, record, bound_column):
    return super(CustomTextLinkColumn, self).render( 
      self.custom_text if self.custom_text else value, 
      record, bound_column)   

使用,正如Serafeim所说:

id = CustomTextLinkColumn('downloadFile', args=[A('pk')], 
  custom_text='Export', verbose_name='Export', )