首页 > 解决方案 > 如何为 Meta 类设置未指定的值(如何创建模板表类)django_tables2

问题描述

我有 30 多个表,所以我不想为所有表编写相同的代码。甚至它的复制粘贴。我所有的表都应该像这样:

class MyTable(tables.Table):
    edit_link = tables.columns.Column(viewname='edit_table_field',
        kwargs={'table_name': 'MyModel', 'pk': A('pk')}, text='edit)
    ...
    class Meta:
        model = MyModel
        ...

我想从这个类中制作一个模板,它将模型的名称(MyModel)作为参数,并在一个类中为它们中的每一个创建相同的表表。我不知道如何将值从类传递到元类。

另外,也许有人知道任何 python 框架,它为我的表实现映射和 CRUD 方法,就像它在 Vaadin (Java) 中一样?

标签: pythondjangodjango-tables2

解决方案


由于 python 是一种高度动态的语言,您可以通过多种方式实现这一点。想到的一个(您可以在函数内声明类,也可以将它们作为常规对象传递/返回):

def get_table(model_cls):

    class ModelTable(tables.Table):
        edit_link = tables.columns.Column(
            viewname='edit_table_field',
            kwargs={'table_name': model_cls.__name__, 'pk': A('pk')}, 
            text='edit'
        )
        ...
        class Meta:
            model = model_cls
            ...

    return ModelTable


tables = [
    get_table(model)
    for model in (Brand, Product, Category)  # Your models here
]

您也可以扩展它以生成完整的视图。


推荐阅读