9

在我的 Django 项目中,我需要有哪些列是动态的并且取决于数据库中的内容的表。所以我在这里找到了一个解决方案,它可以工作,但有一点问题。这是我动态扩展的带有表的类:

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

这是扩展类的方法:

def define_table(roles):
    attrs = dict((r.name, tables.Column() for r in roles)
    klass = type('DynamicTable', (ClientsTable,), attrs)
    return klass

当我像这样在views.py中创建一个表时:

table = define_table(roles)(queryset)

该表显示了我想要的列,但在 html 代码中我看到它忽略了 attrs:

{"class": "paleblue", "orderable":"True", "width":"100%"}

所以淡蓝色没有css样式,这对我很重要。我觉得它可能与 Meta 类有关,但字段和模型正在工作,所以我不知道为什么 attrs 没有。

4

2 回答 2

9

对于现在正在寻找这个的任何人,从 django-tables2 1.10 开始,您可以通过传递extra_columnsTable构造函数来动态地将列添加到表中。

extra_columns应该是一个元组列表,定义一个列名和一个Column对象,例如。

class MyTable(Table):
    static_column = Column()

mytable = MyTable(extra_columns=[('dynamic_column', Column())]

请参阅 API 文档:http ://django-tables2.readthedocs.io/en/latest/pages/api-reference.html#django_tables2.tables.Table

于 2017-08-08T14:34:00.720 回答
7

首先,元选项在 django-tables2 中没有被继承。因此,您可以检查问题中讨论的解决方法以查看是否适合,或者您可以手动将 Meta 类添加到动态表中。为此,您可以像这样使用您的 define_table 方法:

def 定义表(角色):
  attrs = dict((r.name, tables.Column() for r in roles)
  attrs['Meta'] = type('Meta', (), dict(attrs={"class":"paleblue", "orderable":"True", "width":"100%"}) )
  返回类

哎呀,两年多后,我注意到我的代码中有一个错误——我忘记包含上面的行klass = type('DynamicTable', (ClientsTable,), attrs)return klass。为了完整起见,我现在添加它。

于 2013-05-24T18:44:40.320 回答