Django как вывести список значений в html для 'for loop' в моем случае?

Я хочу знать, как я могу вывести что-то вроде [value1, value2, value3] из Django. Chart.js использует такой формат данных. В моем понимании, counts_data=...aggregate(..., ..., ...) - это список, похожий на список значений (value1, value2, value3), но затем, когда я возвращаю, он должен быть диктой, поэтому я превращаю его в context = {"counts_data", counts_data}, что похоже на на {counts_data1: (value1, value2, value3), counts_data2:(value1, value, value3),...}, поэтому я не уверен, как я могу вывести данные типа [value1, value2, value3], я пытался поместить их в один queryset, но queryset может получать или фильтровать только один статус, а у меня 3 статуса, так что я запутался, было бы здорово, если бы кто-нибудь смог немного объяснить? Будьте здоровы

views.py

'''

def visualisation(request, project_id):

project = Project.objects.get(id=project_id)

counts_data = Todo.objects.aggregate(
    to_do_count=Count('id', filter=Q(status='to_do')),
    in_progress_count=Count('id', filter=Q(status='in_progress')),
    done_count=Count('id', filter=Q(status='done'))
    )

return render(request, 'todo_lists/progress.html', {"counts_data":counts_data})

'''

html

'''

$(document).ready(function() {
    var ctx = document.getElementById('myChart').getContext('2d');
    var myChart = new Chart(ctx, {
        type: 'doughnut',
        data: {
            // labels format ['label1', 'label2', 'label3', ]
            // you can choose to have a static labels if you are sure that 
            // there is always a specific number of labels
            labels: [{% for label in counts_data %} '{{ label }}', {% endfor %}],

            datasets: [{
                label: '# of Votes',

                // data format [value1, value2, value3, ]
                data: [{% for label, value in counts_data.items() %} {{ value }}, {% endfor %}],

                backgroundColor: [
                    'rgba(255, 99, 132, 0.2)',
                    'rgba(54, 162, 235, 0.2)',
                    'rgba(255, 206, 86, 0.2)'
                ],
                borderColor: [
                    'rgba(255, 99, 132, 1)',
                    'rgba(54, 162, 235, 1)',
                    'rgba(255, 206, 86, 1)'
                ],
                borderWidth: 1
            }]
        },
        options: {
            responsive: false

        }
    });
}); 

'''

Вы можете использовать фильтр шаблона json_script для вывода переменной в контексте в формате, который вы можете использовать в вашем JS

{{ counts_data|json_script:"counts-data" }}

Затем прочитайте данные и загрузите их в качестве переменной в ваш скрипт

var countsData = JSON.parse(document.getElementById('counts-data').textContent);

Затем вы должны иметь возможность получить доступ к данным, используя countsData.to_do_count и так далее

Вы можете использовать Object.keys для получения всех ключей от объекта

Object.keys(countsData)
Вернуться на верх