按外键字段的计数排序?

2024-04-27 17:52:06 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我的问题很简单:我怎样才能得到提交最多的三个用户的列表?

我尝试在用户模型上创建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]

但这失败了,我试过的其他事情也一样。我真的可以用智能数据库查询吗?或者我应该在视图文件中做些更黑的事情?


Tags: 用户模型selfsubmissionbymodelobjectsmodels
1条回答
网友
1楼 · 发布于 2024-04-27 17:52:06
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,但我假设它是User上的BooleanField

相关问题 更多 >