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可能很大。
有没有办法做到这一点使用Django的数据库API的?
我一直在尝试你的建议,但还没有得到它。我有一个StudentQuizzes的QuerySet。每个StudentQuiz有5个FK到StudentQuestion。 StudentQuestion没有FK给StudentQuiz。所以我无法过滤StudentQuestion并查找student_quiz__date_gte = blah - 对吗? – zaphod
你其实可以!从文档“这倒过来了。要引用‘反向’的关系,只是使用模型的小写名字。”如果你看看你的例子,它与你的设置很相似 - Blog to Entry是一对多的关系,其中条目具有博客的外键。 https://docs.djangoproject.com/en/dev/topics/db/queries/#spanning-multi-valued-relationships是该页面上的另一个很好的部分(尽管如果我是你,我可能会从头开始阅读) – Colleen
I确实读到了相反的关系。我没有得到所有的条目。我想我可能出错的部分是同一个模型中有5个FK。所以可能只是使用型号名称是不够的? – zaphod