Как заказать набор django qset по двум полям, а затем аннотировать его рангом - PullRequest
0 голосов
/ 28 мая 2020

Я использую Django 3 с PostgreSQL. Я хотел бы аннотировать свой набор запросов рангом на основе упорядочения по двум полям.

Моя упрощенная модель выглядит так

class Player(model.Models):
    name = models.CharField()
    primary_score = models.IntegerField()
    secondary_score = models.IntegerField()

Набор запросов должен сначала упорядочиваться по primary_score, а затем для игроков с тем же primary_score он должен иметь рейтинг secondary_score. Затем переменная rank должна быть аннотирована положением игрока в упорядоченном наборе запросов. Я могу сделать это для одного поля, но не знаю, как это сделать для обоих:

queryset = Player.objects.order_by('primary_score', 'secondary_score').annotate(rank=Window(expression=Rank(), order_by=F('primary_score').desc()))

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

Любые идеи будут оценен.

...