Как я могу аннотировать набор запросов в django, чтобы добавить дополнительное поле, которое будет представлять индекс (место) каждой строки в упорядоченном результате?
Мне нужно получить пользователей упорядоченным способом с добавлениемполе, в котором будет указано абсолютное место каждого объекта в заказе.
У меня есть такой код:
users = User.objects.all().annotate(total_points=Sum('score_earnings', distinct=True)).order_by('-total_points')
users = users.annotate(place, /* how to get an index of each ordered? */)
Это связанная с ней модель баллов:
class Score(models.Model):
user = models.ForeignKey('users.CustomUser', related_name='score_earnings', on_delete=models.CASCADE)
points = models.DecimalField(max_digits=8, decimal_places=1)
Таким образом, это поле place
должно представлять индекс каждой строки в результате: 1, 2, 3, ...
Позже мне придется выбрать диапазон из результата и ожидать получениязначение place
абсолютное поле:
users[3:6]
Ожидаемый результат:
[{
"total_points": 100.0,
"place": 3
}, {
"total_points": 70.0,
"place": 4
}, {
"total_points": 50.0,
"place": 5
}]
Я использую MySQL DB.
------------ Обновление ------------
Я смог сделать что-то подобное в SQL:
set @row_num = 0;
SELECT name, @row_num := @row_num + 1 as row_index
FROM Users
Но это все еще не совсем то, что мне нужнопотому что, если я добавлю инструкцию LIMIT, значение row_index будет в новом результате ...