python - 如何在一个查询中检索 3 个不同表中的所有数据?

标签 python django django-models django-queryset

我想要执行以下操作,但我不知道该怎么做:

对于每个类(class),向我显示该类(class)的所有学生,对于该类(class)的每个学生,向我显示该学生的所有统计数据。

我的模型是:

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")

我的 ClassesDetailView 是:

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

我知道我必须覆盖查询集,并且我尝试了 select_relatad 但仍然找不到解决方案。 预先感谢您!

最佳答案

它将运行 2 个循环。根据您的模型,class 可以有许多students,而student 可以有许多statistics
更新:

result = []  

for student in Students.objects.all(): 

    student_data = {}
    student_data['student_name'] = student.name
    student_data['class_name'] = student.student_class.name
    statistics_data = []  

    for statistics in student.statistics.all():  

        statistics_data.append({
        'dictation_score': statistics.dictation_score,
        'writing_score': statistics.writing_score,
        'grammer_score': statistics.grammer_score,
        'in_class_performance': statistics.in_class_performance
        })  

    student_data['statistics_data'] = statistics_data  

result.append(student_data)

关于python - 如何在一个查询中检索 3 个不同表中的所有数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58156165/

相关文章:

django - 使 'collectstatic' 找到更新的文件

python - 是否可以为整个 python 项目设置默认日志文件?

python - Django 扩展 model.User

django - 模型中 Django 文本字段的适当性

python - Django is_valid() 不适用于 modelformset_factory

python - 如何将文本导出到新文件、用户输入?

python - 一个不需要位置参数的可选参数

python - 使用 asyncio 及时更新一些数据并通过 aiohttp 呈现?

python - python脚本的CPU使用率

python - 在 django 中将模型设置为特定数据库