0

我使用 gviz_api 创建了一个表。该表包含由字符串值和数值组成的列。api 自动选择列呈现自己的顺序;但是,我希望渲染按照我提供描述的顺序进行。

为了创建表,我传入了一个描述,它是一个字典和数据,它是每一行的字典列表。我认为因为描述是字典,所以排序不是明确的,所以可以随机选择。有没有办法强制 api 使用我在描述中指定的列的顺序或任何其他方式?

这是我拥有的示例描述和数据代码:

descr = {'field1': ('string', 'Field1'),
         'field2': ('number', 'Field2'),
         'field3': ('string', 'Field3'),
         'field4': ('string', 'Field3')}
data = [{'field1': 'value1-1', 'field2': value1-2, 'field3': 'value1-3', 'field4': 'value1-4},
        {'field1': 'value2-1', 'field2': value2-2, 'field3': 'value2-3', 'field4': 'value2-4}]

data_table = gviz_api.DataTable(description)
data_table.LoadData(data)
code = data_table.ToJSCode(stats_type_name + '_data')

以及事物实际呈现的顺序:

field3     field2      field1     field4
value1-3   value1-2    value1-1   value1-4
value2-3   value2-2    value2-1   value2-4

我希望事物出现的顺序与我在描述中指定的顺序相同:

field1     field2      field3     field4
value1-1   value1-2    value1-3   value1-4
value2-1   value2-2    value2-3   value2-4
4

2 回答 2

1

我决定从源头上纠正问题。我以特定顺序指定查询并期望我的结果以相同的方式。

我对gviz_api.py( Line 488)进行了本地修改

Change: for key, value in sorted(table_description.items()):
To    : for key, value in table_description.items():

DataTables现在将按照为创建提供的相同顺序呈现/公开他们的数据(以toJS()toJSON()等方式返回) 。DataTable

带来额外的好处,我现在不需要一大群笨拙views的人来确保图表正常工作!

凯洛

于 2012-08-28T14:49:32.893 回答
0

所以我找到了一个黑客解决方案。从观察中,我注意到 gviz_api 在向表中添加列时使用字母顺序。我的列名有不同的标签(即 ('string', 'label') 中的第二个条目,它们不是按字母顺序排列的。为了解决这个问题,我在标签名称前加上一个数字(即 ('string', '1label') ) 以确保列的顺序是我想要的。

如果其他人找到一个不那么 hackier 的解决方案,请告诉我。

于 2012-07-22T23:14:07.597 回答