Как получить позицию объекта в наборе queryset без цикла for?

у меня есть набор запросов длиной = 10000 пользователей

sorted_users = User.ojbects.all().order_by("-money")

и мне нужно получить позицию конкретного пользователя в этом отсортированном наборе запросов,

я могу сделать это с помощьюoor loop:

user_position = 1
for account in sorted_users:
    if account.username == "admin":
        break
    my_position += 1
print(user_position)

работает хорошо, но в случае роста числа пользователей, например, до 100 000, потребуется много времени для подсчета позиций пользователей каждый раз, for loop работает медленно

как я могу сделать это быстрее, без for loop?

Вы можете попробовать получить список идентификаторов пользователей, а затем проверить индекс пользователя admin:

users_ids = User.objects.all().order_by("-money").values_list('id', flat=True)
admin_index = users_ids.index(<admin_id>)
print(admin_index)
Вернуться на верх