gpt4 book ai didi

python - 合并 django-tables2 和动态模型中的表

转载 作者:行者123 更新时间:2023-12-01 05:50:42 33 4
gpt4 key购买 nike

我希望能够合并两个或多个表(由 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)

如您所见,构造函数为模型中不同的字段提供了不同的列名前缀。

现在可以从不同的模型生成表格,例如:

“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 中的公共(public)值可以解释为主键)

结果是一个django-tables2对象,这是必要的,因为我想提供分页和排序选项。

我希望我的描述是可以理解的,如果不能理解,抱歉。

非常感谢您的时间和帮助。

最佳答案

也许是上一个question and answer我的会有帮助吗?

我通过原始 SQL 访问动态创建的组合表中的数据,并将这些数据发送到 Django-Tables2 中呈现

如果您想指定呈现的列的顺序以及具体呈现的列,请定义一个元类,如下所示(其中“序列”是列的顺序;注意“...”仅表示“以及所有其他列”) ' - 查看 Tables2 的 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)

关于python - 合并 django-tables2 和动态模型中的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14441029/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com