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()中的所有列,然后数据会显示在它所对应的列对象下。
希望你能帮忙!
2 个回答
0
这个表格应该长成这样:
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/#specifying-alternative-data-for-a-column
1
如果你想在程序运行时而不是编写代码时来指定表格的列,可以使用下面这个类:
tables.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})