python - 如何为 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) 中一样?
解决方案
由于 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
]
您也可以扩展它以生成完整的视图。
推荐阅读
- android - Android中的圆角按钮不扩大尺寸
- matlab - matlab 中的拓扑图:EEG 数据的 2D 可视化
- bash - 将子文件夹中的所有 .bz2 提取到另一个文件夹?
- ios - iOS Firebase Analytics:Firebase Analytics 似乎没有收集用户自动收集信息
- pandas - 应用于数据框的一系列 if 语句
- pyspark - pyspark 的窗口函数 fn.avg() 只输出相同的数据
- javascript - i18next 'resGetPath' 未在插件初始化中实现
- eclipse - 运行功能文件将在不同的步骤类中但在同一个包中触发@before
- .net-core - .NET Core + Elastic Transaction + SqlBulkCopy,出现“Unexpected existing transaction”异常
- c# - 我如何结合这些 Linq 查询以及如何提高查询速度