一尘不染

按ForeignKey字段的顺序排序?

django

我有一个用户模型和一个提交模型。每个提交都有一个上载用户的外键字段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]

但这失败了,就像我尝试过的所有其他尝试一样。我实际上可以使用智能数据库查询吗?还是我应该在视图文件中做些更怪异的事情?


阅读 322

收藏
2020-03-30

共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在示例模型代码中提及,但在假定它为BooleanFieldon的情况下已将其保留User

2020-03-30