Подтвердить что ты не робот

Заказ по счету поля ForeignKey?

У меня есть модель пользователя и модель представления. Каждое представление имеет поле 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?

4b9b3361

Ответ 1

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.