Преобразование SQL-запроса в выражение Django

Предположим, что у меня есть следующие модели Django и соответствующие SQL-таблицы с некоторыми данными:

Ответ пользователя:

id answer partquestion_id
1 667 1

PartQuestion:

id question_id
1 1

Решение:

id content question_id
1 667 1
2 85 2

Я хочу получить все ответы пользователей, где ответ равен решению соответствующего вопроса. Я придумал такой SQL-запрос, но не могу придумать, как реализовать его в запросе Djano:

select * from (useranswer join partquestion on 
useranswer.partquestion_id = partquestion.id) join solution on 
partquestion.question_id = solution.question_id where answer=content;

В результате будет выведено следующее:

id answer partquestion_id id question_id id content question_id
1 667 1 1 1 1 667 question_id

Я просто не могу разобраться с этой концепцией в Django. Может быть, использовать F-выражения и что-то еще.

Спасибо за любой совет.

Вы можете просто использовать значения и отношения __ для обхода внешних ключей.

UserAnswer.objects.values('id', 'answer', 'partquestion_id', 'partquestion_set__id', 'partquestion_set__question_id')

К сожалению, для меня не достаточно очевидно, как получить эти столбцы для последней таблицы, но я надеюсь, что из этого ответа вы сможете понять, как это сделать?

Хорошо, я просто понял это сам, прочитав ответ и комментарии от @Swift.

Это:

UserAnswer.objects.filter(partquestion__question__solution__content=F('answer'))

Теперь это довольно просто, но я просто попробовал использовать solution_set вместо просто solution.

Если вы определите свои модели следующим образом:

class UserAnswer(models.Model):
   question = models.ForeignKey(questions,on_delete=models.CASCADE)
   user_answer = models.CharField()

class questions(models.Model):
   question = models.CharField()
   answer = models.CharField()

тогда этот фильтр должен работать

right_answers = UserAnswer.objects.filter(question__answer = user_answer )
Вернуться на верх