按外来键字段的数量排序?

时间:2010-03-23 15:27:25

标签: django

我有一个用户模型和一个提交模型。每个Submission都有一个名为user_submitted的ForeignKey字段,用于上传它的用户。

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

我的问题非常简单:如何获得提交次数最多的三个用户的列表?

我尝试在User模型上创建num_submissions方法:

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]

但这失败了,我尝试过的所有其他事情都失败了。我可以使用智能数据库查询实际执行此操作吗?或者我应该在视图文件中做些更多的hacky?

1 个答案:

答案 0 :(得分:92)

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