У меня есть приложение, которое экономит универсиады викторин с использованием двух моделей: StudentQuiz
сохраняющим вопросами студент был задан вопросом StudentQuestion
сохраняет ответы студента по каждому из этих вопросов.Как создать запрос на основе полей другого QuerySet
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.
Так я создаю первый QuerySet:
quizzes_done = StudentQuiz(user=mystudent, date__gte=start_date, date__lte=end_date)
Теперь я хочу посмотреть на все вопросы, которые находятся в этих StudentQuizzes
, и вы хотите посчитать количество вопросов, которые имеют q_score = 1
.
В настоящее время я просто перебираю QuerySet и делаю это программно. Но QuerySet может быть огромным.
Есть ли способ сделать это, используя DB API-интерфейсы django?
Я пробовал ваше предложение, но не понимаю его. У меня есть QuerySet StudentQuizzes. Каждый StudentQuiz имеет 5 FKs для StudentQuestion. Пока StudentQuestion не имеет FK для StudentQuiz. Поэтому я не могу фильтровать на StudentQuestion и искать student_quiz__date_gte = blah - правильно? – zaphod
вы на самом деле можете! Из документов «Это работает и наоборот». Чтобы обратиться к «обратным» отношениям, просто используйте строчное имя модели ». Если вы посмотрите на свой пример, это похоже на вашу настройку. Блог для входа - это отношение «один ко многим», где «Записи» имеют внешние ключи для блогов. https://docs.djangoproject.com/en/dev/topics/db/queries/#spanning-multi-valued-relationships - еще один хороший раздел на этой странице (хотя, если бы я был вами, я мог бы читать с самого начала) – Colleen
I прочитал обратную связь. Я не получаю все записи. Я предполагаю, что часть, где я, вероятно, ошибаюсь, состоит в том, что в одной модели есть 5 FK. Так что, вероятно, просто использование имени модели недостаточно? – zaphod