Заказ по счету поля 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?
Ответы
Ответ 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
.