Упорядочить по количеству полей ForeignKey? - PullRequest
37 голосов
/ 23 марта 2010

У меня есть модель пользователя и модель представления. Каждое представление имеет поле ForeignKey, которое называется user_submitted для пользователя, который его загрузил.

class Submission(models.Model):
    uploaded_by = models.ForeignKey('User')
class User(models.Model):
    name = models.CharField(max_length=250 )

Мой вопрос довольно прост: как я могу получить список трех пользователей с наибольшим количеством представлений?

Я попытался создать метод num_submissions для модели User:

def num_submissions(self):
    num_submissions = Submission.objects.filter(uploaded_by=self).count()
    return num_submissions

и затем делает:

top_users = User.objects.filter(problem_user=False).order_by('num_submissions')[:3]

Но это не так, как и все другие вещи, которые я пробовал. Могу ли я сделать это с помощью интеллектуального запроса к базе данных? Или я должен просто сделать что-то более взломанное в файле views?

1 Ответ

93 голосов
/ 23 марта 2010
from django.db.models import Count
top_users = User.objects.filter(problem_user=False) \
                .annotate(num_submissions=Count('submission')) \
                .order_by('-num_submissions')[:3]

Вы не упомянули problem_user в своем примере кода модели, но я оставил его, предполагая, что это BooleanField на User.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...