Я хочу выделить рейтинг пользователям, основанным на полем точек.django: группировка в запросе order_by?
Прост достаточно продумать с запросом order_by
. Но как я могу разобраться с ситуацией, когда два пользователя имеют одинаковое количество очков и должны иметь одинаковый рейтинг? Должен ли я использовать annotate
, чтобы найти пользователей с одинаковым количеством пунктов?
Мой текущий код и псевдокод описания того, что я хотел бы сделать, приведены ниже.
top_users = User.objects.filter(problem_user=False).order_by('-points_total')
# Wrong - in pseudocode, this should be
# Get the highest points_total, find all the users with that points_total,
# if there is more than one user, set status to 'Joint first prize',
# otherwise set status to 'First prize'
top_users[0].status = "First prize"
if (top_users[1]):
top_users[1].status = "Second prize"
if (top_users[2]):
top_users[2].status = "Third prize"
if (top_users[3]):
top_users[3:].status = "Highly commended"
Код, указанный выше, не имеет отношения к ситуации, когда два пользователя имеют одинаковое количество очков и должны делиться вторым призом. Думаю, мне нужно создать запрос, который ищет уникальные значения points_total и делает какое-то вложенное ранжирование?
Он также не справляется с тем, что иногда существует менее 4 пользователей - кто-нибудь знает, как я могу (в псевдокоде), если top_users [1] не null ... 'в Python?
отличный, подробный ответ - так что я принимаю его, хотя я на самом деле использовал быстрый и грязный код ниже (только потому, что он появился первым!). Спасибо. – AP257