Как получить данные из связанных моделей? - PullRequest
0 голосов
/ 26 сентября 2019

Я новичок в Django и пытаюсь создать сайт для управления информацией о классе, например, студентами и их статистикой.Когда я щелкаю по классу, я вижу детали класса и учеников в этом классе.Тем не менее, я хочу также получить среднюю оценку по каждому учащемуся, но я не знаю, как получить данные из моей статистической модели.Я пытался выбрать select_related, но не работал.Заранее спасибо.

Я хочу сделать это в django:

SELECT class.id, class.name, class.day_and_time, student.name, average(statistics.dictation_score), average(statistics.grammar_score)
FROM classes
INNER JOIN students on student_class = class.id
INNER JOIN statistics on student = student.id
WHERE class.id =(some number)

Файл моих моделей .py:

class Classes(models.Model):
    name = models.CharField(max_length=256)
    day_and_time= models.CharField(max_length=256)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse("classesapp:class_detail", kwargs={"pk": self.pk})


class Students(models.Model):
    name = models.CharField(max_length=256)
    student_class =  models.ForeignKey(
        Classes, related_name = 'students', on_delete=models.SET_NULL, null=True
    )

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse("classesapp:student_detail", kwargs={"pk": self.pk})

class Statistics(models.Model):
    student= models.ForeignKey(
        Students, related_name='statistics', on_delete=models.CASCADE, null=True
    )
    date = models.DateField(blank=True, null=True)
    dictation_score = models.FloatField()
    writing_score = models.FloatField()
    test_score = models.FloatField()
    grammar_score = models.FloatField()
    in_class_performance = models.FloatField()

    class Meta:
        ordering = ["-date"]

    def get_absolute_url(self):
        return reverse("classesapp:classes_list")

Мои просмотры .py файл:

class ClassesDetailView(DetailView):
    stats  = models.Students.objects.select_related('statistics')
    context_object_name = "class_detail"
    model = models.Classes
    template_name = "classesapp/class_detail.html"

Что я хочу сделать: Изображение с сайта, что я хочу сделать

...