我有一个用户模型和一个提交模型。每个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?
答案 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
。