Наборы запросов Django выбирают средний и лучший результат - PullRequest
1 голос
/ 19 апреля 2011

У меня есть такая модель:

class Quiz(models.Model):
    user = models.ForeignKey(User, unique=True)
    school_class = models.CharField(max_length=3, choices=klasa_choices)
    points = models.DecimalField(max_digits=5, decimal_places=2,default=0)
    date = models.DateTimeField(null=True,blank=True)
    active = models.BooleanField(default=False)

По сути, я хотел бы получить средний балл (баллы) и лучший результат с соответствующим пользователем для каждого школьного класса.Это можно сделать легко?(т.е. без дополнительных вычислений?)

До сих пор я пришел к:

Quiz.objects.values('school_class').annotate(avg=Avg('points'),max=Max('points')).order_by('-avg')

, но как мне также получить пользователя с лучшим результатом?

1 Ответ

0 голосов
/ 19 апреля 2011

Вам нужен второй запрос.Вы можете использовать результаты первого, чтобы сэкономить при заказе столов:

quizzes = Quiz.objects.values('school_class').annotate(avg=Avg('points'),max=Max('points')).order_by('-avg')

Quiz.objects.values('user','school_class').filter(points=quizzes.max)

Если вам нужен только один, добавьте .latest ('date'), .latest ('- date') или[0], чтобы получить только один.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...