Динамические столбцы django-tables2
Можно ли сделать динамические столбцы в таблице, используя django-tables2? У меня есть модель, которая содержит все столбцы, которые должны быть в таблице, и данные, которые должны быть под столбцами, все имеют внешний ключ к столбцу.
class Data(models.Model):
data = models.CharField()
column = models.ForeignKey(Column)
user = models.ForeignKey(User)
class Column(models.Model):
header = models.CharField()
Таким образом, крайний левый столбец таблицы должен быть пользователем, а следующие столбцы должны быть столбцами в Column.objects.all(), тогда данные находятся под объектом столбца, к которому у них есть внешний ключ.
Я надеюсь, что вы можете помочь!
1 ответ
Если вы хотите указать столбцы таблицы во время выполнения, а не во время программирования, вы можете использовать класс ниже:
table.py
import django_tables2 as tableslib
class DynamicColumnsTable(tableslib.Table):
def __init__(self, *args, column_specs=(), **kwargs):
bc = type(self.base_columns)(self.base_columns) # clone
for name, column in column_specs:
self.base_columns[name] = column
tableslib.Table.__init__(self, *args, **kwargs) # refers to static spec
type(self).base_columns = bc # restore static spec
Пример использования:
views.py
import django.shortcuts as shortcuts
import django_tables2 as tableslib
def test(request):
data = [
{"name": "Bobo"},
{"name": "Gogo"},
]
djtable = DynamicColumnsTable(column_specs=( ('name', tableslib.Column()), ),
data=data)
return shortcuts.render(request, 'test.html', {'djtable': djtable})
Таблица должна выглядеть так:
class ABC(tables.Table):
user= tables.Column(accessor='user.username')
column= tables.Column(accessor= 'column.header')
data= tables.Column(accessor='data')
class Meta:
model = Data
sequence= ('user', 'column', 'data')
Подробности: http://django-tables2.readthedocs.org/en/latest/