Django ForeignKey отношение - PullRequest
       8

Django ForeignKey отношение

0 голосов
/ 03 марта 2019

У меня есть диаграмма, где значения получены из 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
                }
            }]
        }
    }

});

Вот и все.Я пытаюсь сделать мой код многоразовым.Большое спасибо.Хорошего дня.

...