成功使用Django Chartit 2构建图形(简单折线图和数据透视图的不同用途)后,我尝试使用来自不同模型的数据制作折线图。它失败了,我试图复制示例provided here
它也失败了,我想知道为什么,我的猜测是它可能与Chartit 2的Python 3迁移(我使用Python 3.5 / Django 1.8 / Chartit 0.2.2)作为示例,如果来自Chartit 1文档。也许它还没有适应Python 3,但我无法解决问题......这是我的代码:
/ space / reports / 2
的TypeErrorunorderable类型:dict()<字典()
请求方法:GET
请求网址:http://localhost:8000/space/reports/2
Django版本:1.8.6
异常类型:TypeError
例外值:
unorderable类型:dict()<字典()
异常位置:C:\ Program Files(x86)\ Python 3.5 \ lib \ site-> packages \ chartit \ charts.py in _groupby_x_axis_and_vqs,第159行
在get_response中的C:\ Program Files(x86)\ Python 3.5 \ lib \ site-packages \ django \ core \ handlers \ base.py response = wrapped_callback(request,* callback_args,** callback_kwargs)...
报告3中的C:\ Users \ Usuario1 \ space \ reports \ views.py 'text':'月号'}}}})...
init 中的C:\ Program Files(x86)\ Python 3.5 \ lib \ site-packages \ chartit \ charts.py self.x_axis_vqs_groups = self._groupby_x_axis_and_vqs()......
_groupby_x_axis_and_vqs中的C:\ Program Files(x86)\ Python 3.5 \ lib \ site-packages \ chartit \ charts.py itr1 =已排序(itr1,key = sort_fn)
chartit \ charts.py中的相应代码:
dss = self.datasource.series
x_axis_vqs_groups = defaultdict(dict)
sort_fn = lambda td_tk: td_tk[1].get('xAxis', 0)
so = sorted(self.series_options.items(), key=sort_fn)
x_axis_groups = groupby(so, sort_fn)
for (x_axis, itr1) in x_axis_groups:
sort_fn = lambda td_tk: dss[td_tk[1]['_x_axis_term']]['_data']
**itr1 = sorted(itr1, key=sort_fn)**
for _vqs_num, (_data, itr2) in enumerate(groupby(itr1, sort_fn)):
x_axis_vqs_groups[x_axis][_vqs_num] = _x_vqs = {}
for tk, td in itr2:
_x_vqs.setdefault(td['_x_axis_term'], []).append(tk)
return x_axis_vqs_groups
如果你能提供帮助,非常感谢!
答案 0 :(得分:-1)
亚历山大托多罗夫的这篇文章可能有所帮助:
问题是两个列表中的第二个元素有所不同 键和Python不知道如何比较它们。在早期的Python中 这个版本是由Ned在这里描述的特殊套装 Batchelder(Python的覆盖工具的作者),但在Python 3中 字典没有自然的排序顺序。如果是 django-chartit(我现在是官方维护者)这个bug 当您想要绘制来自多个源(模型)的数据时触发 相同的图表。在这种情况下,来自每个数据系列的字段 是不同的,并触发上述错误。
链接到错误说明:http://atodorov.org/blog/2016/08/05/python-2-vs-python-3-list-sort-causes-bugs/