如何基于另一个查询集的字段创建查询

时间:2013-07-17 23:37:53

标签: django django-models django-database

我有一个应用程序,使用两个模型保存学生测验: 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?

1 个答案:

答案 0 :(得分:2)

查看queries that span relationships

上的文档

基本上,您应该能够在student_quiz的查询中引用与StudentQuestion对象关联的StudentQestion,过滤q_score和用户,然后使用__访问您想要的StudentQuiz媒体资源(例如filter(student_quiz__date_gte=blah