Как получить максимальное количество ответов на вопрос от каждого пользователя
У меня есть эти 2 модели:
class Question(models.Model):
title = models.CharField(max_length=200)
# other fields
class Answer(models.Model):
user = models.ForeignKey(User)
question = models.ForeignKey(Question)
score = models.IntegerField()
каждый пользователь может отвечать на вопрос несколько раз.
Представьте, что у меня есть такие ответы:
{
"user": 1,
"question": 1,
"score": 50
},
{
"user": 1,
"question": 1,
"score": 100
},
{
"user": 2,
"question": 1,
"score": 100
},
{
"user": 2,
"question": 1,
"score": 200
},
{
"user": 2,
"question": 2,
"score": 100
},
{
"user": 2,
"question": 2,
"score": 200
}
Я хочу, чтобы запрос выдал мне такой результат:
{
"user": 1,
"question": 1,
"max_score": 100
},
{
"user": 2,
"question": 1,
"max_score": 200
},
{
"user": 2,
"question": 2,
"max_score": 200
}
Я хочу получить все максимальные оценки каждого пользователя к каждому ответу.
Я не уверен, как достичь вашей цели с помощью Django ORM, но вы можете сделать это с помощью RawSQL
Answer.objects.raw("""
select a1.* from answer a1 LEFT JOIN answer a2
ON (
a1.user_id = a2.user_id and a1.score < a2.score
)
where a2.user_id isnull
""")
Пояснение: вы получаете только те записи из вашей таблицы, которые не имеют больше score
из той же таблицы для каждого пользователя.
Попробуйте это:
from django.db.models import Max
Answer.objects.all().values("user", "question").annotate(score=Max("score"))