0

我有一个使用两种模型保存学生测验的应用程序:保存 StudentQuiz学生被问到的问题, StudentQuestion保存学生对每个问题的回答。

class StudentQuestion(models.Model):
    user = models.ForeignKey(User)
    question = models.ForeignKey('Question')  # comes from a Questions table
    answer = models.CharField("Answer", max_length = 100, blank=True, null=True)
    q_score = models.IntegerField("Score", blank=True, null=True)


class StudentQuiz(models.Model):
    user = models.ForeignKey(User)
    date = models.DateField("Quiz Date", blank=True, null=True)
    total_score = models.IntegerField("Score", blank=True, null=True)
    ques1 = models.ForeignKey(StudentQuestion, related_name='q1')
    ques2 = models.ForeignKey(StudentQuestion, related_name='q2')
    ques3 = models.ForeignKey(StudentQuestion, related_name='q3')
    ques4 = models.ForeignKey(StudentQuestion, related_name='q4')
    ques5 = models.ForeignKey(StudentQuestion, related_name='q5')

我想找出一个学生在特定日期范围内回答的问题数量,例如,他获得了 1 分。

所以我创建了第一个查询集:

quizzes_done = StudentQuiz(user=mystudent, date__gte=start_date, date__lte=end_date)

现在,我想查看这些问题中的所有问题,StudentQuizzes并想计算有q_score = 1.

目前,我只是在 QuerySet 上循环并以编程方式执行此操作。但是 QuerySet 可能很大。

有没有办法使用 django 的 DB API 来做到这一点?

4

1 回答 1

2

查看有关跨越关系的查询的文档

基本上,您应该能够在查询、过滤和用户中引用student_quiz与您的对象关联的对象,然后使用它来访问您想要的属性(例如)StudentQuestionStudentQestionq_score__StudentQuizfilter(student_quiz__date_gte=blah

于 2013-07-17T23:52:20.200 回答