Django: anular el contenido de datos de un django-tables2 LinkColumn

Utilizo django-tables2 LinkColumn para crear una columna que llama a una función que permite la exportación del objeto en la tabla.

forms.py:

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

Me gustaría que el contenido de esta columna fuera la función href para descargar el archivo con: Exportar como texto, no como id.

Algo así debería estar funcionando ( advierte que no tengo Python aquí, así que no está probado, pero tendrás una idea):

 clase 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 si self.custom_text else value, 
       registro, bound_column)    

Y luego puedes usarlo como

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

Por supuesto, siempre puede usar TemplateColumn o agregar un método render_id a su FilesTable, pero definitivamente el CustomTextLinkColumn es el método más DRY 🙂

No puedo comentar, así que necesito agregar otra respuesta. Corregiré que la invocación “render” no debe tener “self” en la lista de parámetros.

 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) 

Use, como dice Serafeim:

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