【问题标题】:Order by count of a ForeignKey field?按 ForeignKey 字段的计数排序?
【发布时间】:2019-04-12 23:54:12
【问题描述】:

我有一个用户模型和一个提交模型。每个提交都有一个名为 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]

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

【问题讨论】:

    标签: django


    【解决方案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,但我假设它是 BooleanField on User

    【讨论】:

    • 非常好,它与Profile.objects.annotate(num_items=Count('user__item')).order_by('-num_items')一起工作
    • 您好,请问有没有办法只过滤过去 24 小时内提交次数最多的用户?假设提交中有一个时间戳字段。
    猜你喜欢
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多