我有一个图表,其中值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
}
}]
}
}
});
仅此而已。我试图使我的代码可重用。 非常感谢。祝你有美好的一天。