2017-08-10 83 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

啊是的,當然這是一個字典,將更新我的答案。很高興幫助你:) –