我有一个应用程序,使用两个模型保存学生测验:
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?
答案 0 :(得分:2)
查看queries that span relationships
上的文档基本上,您应该能够在student_quiz
的查询中引用与StudentQuestion
对象关联的StudentQestion
,过滤q_score
和用户,然后使用__
访问您想要的StudentQuiz
媒体资源(例如filter(student_quiz__date_gte=blah
)