Как получить максимальное количество ответов на вопрос от каждого пользователя

У меня есть эти 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"))
Вернуться на верх