Невозможно увидеть круговую диаграмму в шаблоне, используя django и chart js
Я хочу подсчитать количество компаний в модели companytype и показать это на круговой диаграмме. Подсчет должен вестись по полю name в таблице company.
Например: Если тип компании медицинская и в этой категории 4 компании, то я хочу показать их количество на круговой диаграмме.
models.py
class CompanyType(models.Model):
company_type = models.CharField(max_length=100)
is_active = models.BooleanField(default=True)
created_at = models.DateField(auto_now_add=True)
updated_at = models.DateField(auto_now=True)
class Company(models.Model):
name = models.CharField(max_length=100)
address = models.TextField()
company_type = models.ForeignKey(CompanyType,on_delete=models.CASCADE)
is_active = models.BooleanField(default=True)
views.py
def index(request):
labels = []
data = []
queryset = Company.objects.values('company_type__company_type').annotate(company_type_sum=Count('name')).order_by('-company_type_sum')
for entry in queryset:
labels.append(entry['company_type__company_type'])
data.append(entry['company_type_sum'])
context = {
'labels':labels,
'data':data,
}
return render(request,'index.html',context)
Я взял код Chartjs из файла index.html если что не так.
index.html
<script>
var ctx = document.getElementById('myChart').getContext('2d');
var myChart = new Chart(ctx, {
type: 'pie',
data: {
labels: [data.labels],
datasets: [{
label: 'Companies in Particular Section',
data: [data.data],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
</script>
Вы помещаете свои данные в массивы в views.py
, но затем также делаете их массивами в new Chart
, этот 2D массив не нравится chart.js, изменение вашего new Chart
на это должно решить проблему:
new Chart(ctx, {
type: 'pie',
data: {
labels: data.labels, // Remove double array
datasets: [{
label: 'Companies in Particular Section',
data: data.data, // Remove double array
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
}
});
Примечание: круговая диаграмма не имеет шкалы y, поэтому вы получите некрасивые линии за кругом, если сохраните ее в опциях, удалив ее, ваша диаграмма будет выглядеть намного лучше