Django - объект не индексируется django графики. js "или вообще ничего не отображается? - PullRequest
0 голосов
/ 12 июля 2020

Я пытаюсь отобразить данные на своих диаграммах, используя некоторые значения модели и диаграммы. js. Мои значения - это поле страны и метод класса, который я не знаю, как его назвать.

Я все время получаю сообщение об ошибке

"TypeError: 'Organization' объект не подлежит подписке django диаграммы. js "или вообще ничего не отображается. Пожалуйста, помогите.

models.py

from django_countries.fields import CountryField

class Organization(models.Model):
    country = CountryField(blank_label='(select country)')

    def Total_Score(cls):
        Total_Score = cls.grants_score() + cls.internal_score() #This is a sum of other class methods. This part works as is.
        return Total_Score

Views.py

def scores_charts(request):

    labels = []
    data = []

    orgz = Organization.objects.values('country').annotate(Total_Scores=Organization.objects.values('Total_Scores()'))
    
    for org in orgz:
        labels.append(org['country'])
        labels.append(org['Total_Scores'])
    
    return JsonResponse(data={
        'labels': labels,
        'data': data,
    }) 

Шаблон. html

<div class="card-block-big">
  <canvas id="scores_charts" data-url="{% url 'scores_charts' %}"></canvas> 
</div>

   <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
   <script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.3/dist/Chart.min.js"></script>

          <script>
        
            $(function () {
        
              var $scores_charts = $("#scores_charts");
              $.ajax({
                url: $scores_charts.data("url"),
                success: function (data) {
        
                  var ctx = $scores_charts[0].getContext("2d");
        
                  new Chart(ctx, {
                    type: 'bar',
                    data: {
                      labels: data.labels,
                      datasets: [{
                        label: 'Scores',
                        backgroundColor: 'blue',
                        data: data.data
                      }]          
                    },
                    options: {
                      responsive: true,
                      legend: {
                        position: 'top',
                      },
                      title: {
                        display: true,
                        text: 'Scores Bar Chart'
                      }
                    }
                  });
        
                }
              });
        
            });
        
          </script>

1 Ответ

0 голосов
/ 12 июля 2020

Эта ошибка

"TypeError: объект" Организация "не может быть подписан django диаграммы. js"

предполагает, что вы пытаетесь получить элемент из объекта организации, который не является dictionary, list или tuple.

Я подозреваю, что вероятная причина этого может быть проистекает из следующего (хотя вы можете подтвердить это с полной трассировкой ошибки, которая должна сообщить вам строку кода, вызывающую ошибку):

for org in orgz:
  labels.append(org['country'])
  labels.append(org['Total_Scores'])

Вы должны попытаться отладить значения этого и проверить их правильность.

...