【问题标题】:Django-Chartit2 'dict_keys' object does not support indexing errorDjango-Chartit2 'dict_keys' 对象不支持索引错误
【发布时间】:2016-02-06 10:10:20
【问题描述】:

我正在按照here 提供的演示示例探索 Django Chartit2 包以用于图表目的。我创建了自己的数据透视图模型,其中包含以下字段:城市、人员和销售额。

在我看来,我正在通过使用基于销售列聚合的术语来创建数据透视图。

尝试访问网址时出现错误:

异常类型:/chart/pivotpool/ 处的 TypeError

异常值:“dict_keys”对象不支持索引

在指定数据透视图的条款时告诉我我遗漏了什么。

class SalesHistory(models.Model):
    city = models.CharField(max_length=50)
    person = models.CharField(max_length=50)
    sales_qty = models.IntegerField()

def some_view(request):
    ds = PivotDataPool(series=[{'options': {'source': SalesHistory.objects.all(), 'categories': ['city']},
    'terms': {'total_sales': Sum('sales_qty')}}])
    pivchrt = PivotChart(datasource=ds, series_options=[{'options': {'type': 'column', 'stacking': True}, 'terms':['total_sales']}], chart_options = {})

我的回溯:

追溯: get_response 中的文件“/home/sam/Documents/onemoreEnv/lib/python3.4/site-packages/django/core/handlers/base.py” 149. 响应 = self.process_exception_by_middleware(e,请求) get_response 中的文件“/home/sam/Documents/onemoreEnv/lib/python3.4/site-packages/django/core/handlers/base.py” 147.响应=wrapped_callback(请求,*callback_args,**callback_kwargs) 在 some_view 中的文件“/home/sam/Documents/Lab Projects/djangoChartit/demoChartit/views.py” 131.'文本':'城市'}}}) __init__ 中的文件“/home/sam/Documents/onemoreEnv/lib/python3.4/site-packages/chartit/charts.py” 508. self.set_default_hcoptions() set_default_hcoptions 中的文件“/home/sam/Documents/onemoreEnv/lib/python3.4/site-packages/chartit/charts.py” 533. category = dss[terms[0]]['categories']

【问题讨论】:

  • 请显示您的代码和完整的回溯。
  • 你能把第一行写成如下:ds = PivotDataPool(series=[{'options': {'source': SalesHistory.objects.all(), 'categories': ['city']}, 'terms': [{'total_sales': Sum('sales_qty')}]}]),然后检查一下吗?
  • 看起来回溯有代码'text': 'Month',您没有显示。
  • @AhmedHosny 在将术语的值转换为列表时收到错误期望使用字典代替:[{'total_sales': Sum(F(sales_qty))}]。

标签: django pivot-table pivot-chart


【解决方案1】:

在chartit的charts.py文件中的set_default_hcoptions函数中使用的术语没有属性索引,这就是它给我错误的原因。我已经评论了它被初始化的那一行,即

# terms = self.series_options.keys()

并添加了我自己的版本:

terms = list(self.series_options)

它对我有用。

【讨论】:

    猜你喜欢
    • 2017-09-20
    • 1970-01-01
    • 2013-06-23
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多