django-tables2 动态列

0 投票
2 回答
2788 浏览
提问于 2025-04-18 09:48

使用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})

撰写回答