如何解决django chart.js-查询以获取特定列的所有不同值的计数
我的目标是创建一个查询,以将唯一的“费用”组合在一起并进行计数。然后正确实现一个for循环,该循环将在饼图中显示多个切片,每个单独的切片显示每个唯一费用的总计数。我的问题是使用当前查询,遇到以下属性错误“ dict”对象没有属性“ charge” 。我尝试了几种其他方式来编写查询,并希望在编写查询或for循环中获得反馈。
# Models.py
class Arrest(models.Model):
number = models.IntegerField()
date = models.DateField()
charge = models.CharField(max_length=64)
# Views.py
def visuals(request):
data = []
labels = []
# The two queries I have tried.
# queryset = Arrest.objects.values('charge').annotate(the_count=Count('charge'))
# queryset = Arrest.objects.values('charge').order_by('charge').annotate(the_count=Count('charge'))
for arrest in queryset:
data.append(arrest.charge)
labels.append(arrest.charge)
return render(request,"data/visuals.html",{
'labels': labels,'data': data,})
# Error
AttributeError at /visuals
'dict' object has no attribute 'charge'
# visuals.html
{% extends "data/layout.html" %}
{% block head %}
<title>Visuals</title>
{% endblock %}
{% block body %}
{% load static %}
<div class="title2">
<h2>Visuals (include links for invdividuals graphs)</h2>
</div>
<div class="body-text">
<div id="container" style="width: 75%;">
<canvas id="pie-chart"></canvas>
</div>
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.3/dist/Chart.min.js"></script>
<script>
var config = {
type: 'pie',data: {
datasets: [{
data: {{ data|safe }},backgroundColor: [
'#696969','#808080','#A9A9A9','#C0C0C0','#D3D3D3'
],label: 'Population'
}],labels: {{ labels|safe }}
},options: {
responsive: true
}
};
window.onload = function() {
var ctx = document.getElementById('pie-chart').getContext('2d');
window.myPie = new Chart(ctx,config);
};
</script>
</div>
{% endblock %}
解决方法
根据documentation,我认为您可能需要再次检查。但这可能是解决方案。
queryset = Arrest.objects.annotate(Count('charge'))
for arrest in queryset:
data.append(arrest.charge__count)
labels.append(arrest.name)
在这里,我假设labels
引用了每个数据的名称并更改了原始代码。
该解决方案需要在两个部分中修改views.py,即新查询和转换为列表。 JS很好。
def visuals(request):
queryset = Arrest.objects.order_by('charge').values('charge').annotate(charge_count=Count('charge'))
data = list(queryset.values_list('charge_count',flat=True))
labels = list(queryset.values_list('charge',flat=True))
return render(request,"data/visuals.html",{
'labels': labels,'data': data,})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。