我希望有可能合并两个或多个表(由django-tables2生成),这些表是从 dynamic models
首先让我描述一下我的问题:
我有以下字段用于动态生成的模型:
...
fields = {
'colA': models.IntegerField(),
'colB': models.IntegerField(),
'colC': models.IntegerField(),
'colD': models.IntegerField(),
}
...
动态处理使我可以存储我的表格,而无需定义冗余的模型类。
从数据库中存储的表派生的模型示例:
myDynamicModelA = DataModels().create_model('myDynamicModelA_tablename')
myDynamicModelB = DataModels().create_model('myDynamicModelB_tablename')
myDynamicModelC = DataModels().create_model('myDynamicModelC_tablename')
myDynamicModelD = DataModels().create_model('myDynamicModelD_tablename')
....
'_ tablename'通常由所有表共享。不同的是前缀'myDynamicModel A,B,C ......'
这是模型部分。
根据这个让我用 django-tables2 描述表结构:
每个模型/表共享一些列/字段,以便我可以像这样定义 django-tables2 类:
class Table_A(tables.Table):
colA = tables.Column()
colB = tables.Column()
可以使用继承来简单地处理不同的字段:
class Table_B(Table_A):
colC = tables.Column()
colD = tables.Column()
def __init__(self, *args, **kwargs):
self.colname = kwargs['colname']
kwargs.pop('colname')
super(Table_B, self).__init__(*args, **kwargs)
for col in self.base_columns:
if col not in ['colA', 'colB']:
self.base_columns[col].verbose_name = '%s_%s' % (self.colname, col)
正如您所看到的,构造函数为不同模型的字段提供了不同的column-name-prefix。
现在可以从不同的模型生成表格,例如:
'myDynamicModelA_tablename'的表格:
列:colA,colB,myDynamicModelA_tablename_colC,myDynamicModelA_tablename_colD
'myGenericModelB_tablename'的表格:
列:colA,colB,myDynamicModelB_tablename_colC,myDynamicModelB_tablename_colD
...
现在我的问题: 是否有可能合并两个表,以便我收到类似的东西:
colA,colB,myDynamicModelA_tablename_colC,myDynamicModelB_tablename_colC,myDynamicModelA_tablename_colD,myDynamicModelB_tablename_colD
将显示的值应该来自表之间的交集(这是可能的,因为colA的常见值,可以解释为主键)
结果是 django-tables2 对象是不可靠的,因为我想提供分页和排序选项。
我希望我的描述是可以理解的,如果没有,我很抱歉。
非常感谢您的时间和帮助。
答案 0 :(得分:2)
也许我的这个question and answer会有所帮助吗?
我通过原始sql从组合动态创建的表中访问数据,并将此数据发送到Django-Tables2
如果要指定呈现的顺序以及确实呈现哪些列,请定义元类,如下所示(其中'sequence'是列的顺序; nb'...'仅表示'和所有其他列' - 查看表格2的documentary [搜索'交换列的位置']):
def getTable(table_name):
cursor = runSQL(table_name,"""
SELECT * FROM subscription_exptinfo,%s
WHERE %s.id = subscription_exptinfo.id
;""" %(table_name,table_name))
exptData = dictfetchall(cursor)
class Meta:
attrs = {'class': 'paleblue'}
sequence = ('id','...')
attrs = {}
attrs['Meta'] = Meta
cols=exptData[0]
for item in cols:
if item=='timeStart':
attrs[str(item)] = tables.DateTimeColumn(format='d-m-Y g:i:s',short=False)
else:
attrs[str(item)] = tables.Column()
myTable = type('myTable', (TableReport,), attrs)
#TableOptions(table).sequence = ["Id","..."]
#print ".........................." + str(TableOptions(table).sequence)
return myTable(exptData)