我有一个用户模型和一个提交模型。每个提交都有一个上载用户的外键字段user_submitted。
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]
但这失败了,就像我尝试过的所有其他尝试一样。我实际上可以使用智能数据库查询吗?还是我应该在视图文件中做些更怪异的事情?
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在示例模型代码中提及,但在假定它为BooleanFieldon的情况下已将其保留User。
problem_user
BooleanFieldon
User