2017-08-10 84 views
1

我在django环境中的views.py中运行查询。目前所有人都在本地运行,并最终将其推向Heroku环境。我使用PostgreSQL。django查询饼图highcharts

def test(request): 
    click_results = clickstats.objects.filter(user=request.user.username, urlid=pk_int) 
    data = parse_data_browser(request, click_results) 
    template = get_template('index.html') 
    context = { 
    'data': data, 
    } 
    return HttpResponse(template.render(context,request)) 

def parse_data_browser(request,click_results): 

    browsers = click_results.values('browser').annotate(browser_qty=Count('browser')).order_by() 
    print("browsers") 
    print(browsers) 
    return browsers 

parse_data_browser打印输出看起来是这样的:

<QuerySet [{'browser': 'Chrome Mobile', 'browser_qty': 4}, {'browser': 'Chrome', 'browser_qty': 9}]> 

面临的挑战是把它在这种形状:

data = [{name: 'Chrome Mobile', y: 4}, {name: 'Chrome', y: 9}] 

然后用它传递给我的index.html以下脚本:

<script> 
    var chart_id = {{ chartID|safe }} 
    var chart = {{ chart|safe }} 
    var title = {{ title|safe }} 
    var yAxis = {{ yAxis|safe }} 
    var data = {{ data|safe }} 
</script> 

并最终创建图表与此脚本:

<script> 
$(function() { 
    var myChart = Highcharts.chart('chartID', { 
     chart: { 
      plotBackgroundColor: null, 
      plotBorderWidth: null, 
      plotShadow: false, 
      type: 'pie' 
     }, 
     series: [{ 
      name: 'Brands', 
      colorByPoint: true, 
      data: [{name: 'Chrome Mobile', y: 4}, {name: 'Chrome', y: 9}] 
     }] 
    }); 
}); 
</script> 

我试图用字典多的东西,并附加功能,但没有确实给出正确的输出。

什么是最好的方法。我宁愿不开始在我的环境中堆叠output-json文件,因为这似乎是一种方法。

感谢您的帮助

回答

1

可以迭代查询和建立一个列表:

data = [{'name': item['browser'], 'y': item['browser_qty'] } 
     for item in parse_data_browser_result.all() ] 

这就是所谓的名单理解。

或者你仍然可以通过查询集的模板,打造这样的数据:

data: [ 
    {% for item in data.all() %} 
     {% if total > 0 %} 
      { name: "{{ item['browser'] }}", y: {{ item['browser_qty'] }} }, 
     {% endif %} 
    {% endfor %} 
] 

<script>内。

+0

正是我在找的!很好的帮助!必须做一些修改,因为'item.browser'返回一个'AttributeError:'dict'对象没有属性'browser''并且做了一个这样的解决方法:'data = [{'name':item ['browser'], 'y':项目['browser_qty']}在浏览器中的项目]' - 不喜欢在我的HTML模板,非常混乱:-) – radzia2

+0

啊是的,当然这是一个字典,将更新我的答案。很高兴帮助你:) –