Я пытаюсь визуализировать годовой темп роста , используя высокие графики в Django.Существует только одна модель Branch , и в представлениях я пытаюсь сгенерировать набор запросов для группировки по годам.Поскольку у меня есть только одна модель, я получаю конкретный экземпляр Branch только в этом году, в то время как мне нужно получить все экземпляры Branch для каждого года для визуализации данных.
models.py
import datetime
from django.db import models
from django.core.validators import MaxValueValidator, MinValueValidator
def current_year():
return datetime.date.today().year
def max_value_current_year(value):
return MaxValueValidator(current_year())(value)
class Branch(models.Model):
branch_id = models.IntegerField()
name = models.CharField(max_length=50)
sales_amount = models.IntegerField()
date = models.PositiveIntegerField(
default=current_year(), validators=[MinValueValidator(1984), max_value_current_year])
views.py
from django.db.models import Count, Q, Sum
from django.shortcuts import render
import json
from .models import Branch
def index(request):
dataset = Branch.objects.values('date', 'sales_amount').annotate( sales=Count('sales_amount'))
categories = list()
sales = list()
for entry in dataset:
categories.append('Year %s' % entry['date'])
sales.append(entry['sales_amount'])
return render(request, 'index.html', {
'categories': json.dumps(categories),
'sales': json.dumps(sales),
})
index.html
{% load static %}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>HomePage</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" media="screen" href="main.css">
<script src = "{% static 'js/jquery.min.js' %}"></script>
</head>
<body>
<div id="container" ></div>
<script src = "{% static 'highcharts/code/highcharts.js' %}"></script>
<script>
Highcharts.chart('container', {
chart: {
type: 'column'
},
title: {
text: 'Annual Sales Growth'
},
xAxis: {
categories: {{ categories|safe }}
},
series: [{
name: 'Total Sales',
data: {{ sales }},
color: 'green'
},
]
});
</script>
</body>
</html>
Ожидаемый результат: если в 2015 году у меня будет две ветви, у меня должно быть 2 ветви гистограммы.И если я добавлю новый экземпляр ветви в 2016 году, должно появиться три столбца гистограммы (два предыдущих и недавно добавленные) или два, если я удалил один из экземпляров.Но фактический результат, который я имею, есть, есть отдельный бар для отдельного года.Например: если в 2015 году имеется два экземпляра филиала, а в 2016 году - один экземпляр филиала, в нем отображаются три отдельных филиала, два столбца в 2015 году и один в 2016 году.