2016-03-30 2 views
1

Итак, у меня есть это приложение для игры, и я собираюсь перечислять оценки пользователей. Запрос я думал об использовании было следующее:Доступ к пользовательской пользовательской информации через запрос

top_list = User.objects.filter().order_by('-score')[:10] 

Но это было до того я реализовал фактического настраиваемого поля «счет» для пользователя. Так что я смотрел на recomended пути, и сделал следующее:

class UserProfile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    score = models.IntegerField(default=0); 

, который заставил меня понять, что score не будет поле в пользователя на всех (если я понял это правильно)? Пользователь будет иметь отношение «один к одному» к UserProfile, который, в свою очередь, держит оценку. Итак, как мне получить список десяти лучших пользователей на основе их оценок в порядке убывания?

ответ

4
User.objects.all().order_by('-userprofile__score')[:10] 

Проверить django doc for explanation о поиске поля с помощью __.

+1

является 'все()' необходим? –

+1

Нет, это не так, это не имеет значения, но я чувствую, что OP использует 'filter()', но не делает никакой фильтрации, имея 'all()', это упрощает понимание. –

+0

Да, я полагаю, что фильтр() был избыточным :) Кстати, userprofile должен быть в нижнем регистре, хотя модель определена как UserProfile? – MrJalapeno

1

Вы можете заказать по смежным областям (docs):

top_list = User.objects.filter().order_by('-userprofile__score')[:10] 
Смежные вопросы