Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 12, 2010 23:34:50

vaxXxa
От: Kyiv, Ukraine
Зарегистрирован: 2009-06-16
Сообщения: 278
Репутация: +  0  -
Профиль   Отправить e-mail  

Нахождение позиции объекта в списке

Есть модель, которая описывает статистику юзера в игре:

class Stats(models.Model):
user = AutoOneToOneField(User, verbose_name=_('User'),
primary_key=True)
points = models.PositiveIntegerField(_('Points'), default=0)
Чтобы вывести список 10 лучших игроков, я делаю примерно такое:
best = Stats.objects.order_by('-points')[:10]
Вопрос, если есть объект user класса User, как правильнее узнать, на каком он месте в общем рейтинге?
Пользователей будет очень много, так что надо как-то с минимумом запросов к базе (ставка на производительность).
Подскажите, если есть какие-то идеи… Спасибо.

AutoOneToOneField беру из django-annoying.



Отредактировано (Окт. 12, 2010 23:37:29)

Офлайн

#2 Окт. 12, 2010 23:45:44

fth
От:
Зарегистрирован: 2010-07-26
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Нахождение позиции объекта в списке

Вроде, если не ошибаюсь, такая конструкция будет выполняться одним запросом:

position = len(Stats.objects.filter(points__gt = user.stats.points))



Офлайн

#3 Окт. 12, 2010 23:57:40

vaxXxa
От: Kyiv, Ukraine
Зарегистрирован: 2009-06-16
Сообщения: 278
Репутация: +  0  -
Профиль   Отправить e-mail  

Нахождение позиции объекта в списке

хм… интересно придумано! спасибо…
Кто что еще посоветует?



Офлайн

#4 Окт. 13, 2010 07:02:28

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

Нахождение позиции объекта в списке

Наверное тогда лучше

position = Stats.objects.filter(points__gt = user.stats.points).count()



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version