当前位置: 首页 > 面试题库 >

按ForeignKey字段的顺序排序?

呼延钱明
2023-03-14
问题内容

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



 类似资料:
  • 问题内容: 我有一些带有名称字段的文档。我正在使用名称字段的分析版本进行搜索和排序。排序是在一个级别上进行的,即名称首先是按字母顺序排序的。但是在字母列表中,名称是按字典顺序而不是按字母顺序排序的。这是我使用的映射: 谁能提供相同的解决方案? 问题答案: 深入研究Elasticsearch文档,我偶然发现了这一点: 排序和排序规则 不区分大小写的排序 假设我们有三个用户文档,其名称字段分别包含Bo

  • 问题内容: 如何获得按字段排序的struct输出? 问题答案: A 是字段的 有序 集合。该包使用反射来获取值的字段和值,并按照定义它们的顺序生成输出。 因此,最简单的解决方案是在已经按字母顺序排列字段的位置声明类型: 如果您不能修改字段的顺序(例如,内存布局很重要),则可以通过为结构类型指定一个方法来实现接口: 所述包检查所传递的值工具,并且如果是的话,调用它的方法,以产生输出。 该解决方案的缺

  • 问题内容: 我是Java的新手,正在尝试按字母顺序排列术语的arrayList。(一个术语定义为一个字符和一个整数)(例如 我的代码如下: 为什么这不起作用?以及我该如何完成呢?我的arrayList称为术语,填充有Term类型 问题答案: 您在这行代码中遇到的问题。您的课程不是So 的类型,这两个对象将基于哪个属性或条件方法? 您必须使您的类为Comparable类型。和,根据您的需要覆盖该方法

  • 问题内容: 我在Lucene 5.0中对字符串字段进行排序时遇到问题。显然,自Lucene 4更改以来,您可以进行排序的方式。下面显示了正在为我的文档建立索引的某些字段的摘要。 我想首先对相关性进行排序,这很好。我的问题是标题字段上的排序不起作用。我创建了一个排序域,在一系列方法调用之后,我试图将其与TopFieldCollector一起使用。 转到: 最后是应用排序字段的方法: 使用返回的收集器

  • 在ElasticSearch中为多个字段指定排序顺序的最佳方法是什么?查询字符串格式似乎根本不起作用: 人们希望先按字段1排序,然后按字段2排序,但似乎只有一个字段排序正确。完整的符号效果更好,但第一个条目偶尔会出现错误的搜索顺序:

  • 问题内容: 我已经在Redis中使用排序集实现了排行榜。我希望具有相同分数的用户按时间顺序排序,即,第一名的用户应排名更高。当前,redis支持词典顺序。有没有一种方法可以覆盖它。手机号码被用作排序集中的成员。 我想到的一种解决方案是在移动电话号码之前添加时间戳,并维护散列以映射移动电话号码和时间戳。 这样,在任何情况下,我都可以通过从哈希添加前缀来获得给定用户的排名。 现在这不是我想要的。这将与