Nel mio progetto Django ho bisogno di avere tabelle le cui colonne sono dinamiche e dipendono da ciò che è nel database. Così ho trovato una soluzione in here e funziona, ma con un piccolo problema. Ecco la classe con un tavolo che sto estendendo in modo dinamico:Django-tables2 - aggiunta dinamica di colonne alla tabella - non aggiunta attrs al tag table in html
class ClientsTable(tables.Table):
class Meta:
model = Client
attrs = {"class": "paleblue", "orderable":"True", "width":"100%"}
fields = ('name',)
def __init__(self, *args, **kwargs):
super(ClientsTable, self).__init__(*args, **kwargs)
self.counter = itertools.count()
def render_row_number(self):
return '%d' % next(self.counter)
def render_id(self, value):
return '%s' % value
E qui è il metodo che estende la classe:
def define_table(roles):
attrs = dict((r.name, tables.Column() for r in roles)
klass = type('DynamicTable', (ClientsTable,), attrs)
return klass
Quando sto creando una tabella in views.py in questo modo:
table = define_table(roles)(queryset)
la tabella mostra le colonne come avrei voluto, ma nel codice html vedo che ha ignorato le attrs:
{"class": "paleblue", "orderable":"True", "width":"100%"}
Quindi non esiste uno stile css per paleblue, che è importante per me. Penso che potrebbe essere qualcosa con la classe Meta ma i campi e il modello funzionano, quindi non ho idea del perché attrs non lo sia.
Bella roba! Non ho risolto esattamente il mio problema, ma ho potuto modificare il tuo snippet per risolvere il mio problema e ho imparato molto sull'azione di tipo Python 'type' e meta class. Grazie mille! – schwobaseggl
Contento di aver aiutato! Ho anche scritto vari post facendo cose di tipo sul mio blog: http://spapas.github.io/category/django.html – Serafeim