Django ForeignKey关系

时间:2019-03-03 11:53:07

标签: chart.js django-2.1

我有一个图表,其中值ar来自django,我有一个模型来注册发言人,另一个模型为该发言人评分(外键关系)。该图表用于显示我的对象的投票结果。我已经为每个演讲者创建了这两个模型,因此我的代码无法重用。我一直在尝试了解如何对其进行优化。我不知道问题出在我用python还是javascript处理数据的方式。

因此,在我的models.py中,我有:

 class Palestrante(models.Model):
    nome = models.CharField(max_length=200)
    id = models.AutoField(primary_key=True)

    class Meta:
        verbose_name = 'palestrante'
        verbose_name_plural = 'palestrantes'

    def __str__(self):
        return self.nome

class Pontuacao(models.Model):
    nome = models.ForeignKey(Palestrante, on_delete=models.CASCADE)
    pontuacao = models.IntegerField(default=5, validators=[MinValueValidator(0), MaxValueValidator(10)])
    id = models.AutoField(primary_key=True)

    def __str__(self):
        return str(self.pontuacao) 

和views.py

def index(request):
    queryset = Pontuacao.objects.all()
    queryset2 = Palestrante.objects.all()
    nomes = [obj.nome for obj in queryset2]
    pontos = [int(obj.pontuacao) for obj in queryset]
    context = {
        'nomes': json.dumps(nomes),
        'pontos': json.dumps(pontos),
    }

    return render(request, 'index.html', context)

我知道如何获取每个分数之和的平均值,但是我仍然无法正确地将其放入图表中。

和在javascript中

var ctx = document.getElementById("personChart");
var nomes = JSON.parse('{{ nomes|safe }}');
var pontos = JSON.parse('{{ pontos|safe }}');
//var nomes2 = JSON.parse('{{ nomes2|safe }}');
//var pontos2 = JSON.parse('{{ pontos2|safe }}');
var personChart = new Chart(ctx, {
    type: 'bar',
    data: {
        labels: nomes,
        datasets: [{
            label: 'Palestrantes',
            data: pontos,
            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: {
            yAxes: [{
                ticks: {
                    beginAtZero:true
                }
            }]
        }
    }

});

仅此而已。我试图使我的代码可重用。 非常感谢。祝你有美好的一天。

0 个答案:

没有答案