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

django-通过计算字段对queryset排序

郭志
2023-03-14
问题内容

我想要一个带有计算字段的模型,可以将其应用于排序。例如,假设我有以下模型:

class Foo(models.Model):
    A = models.IntegerField(..)
    B = models.IntegerField(..)
    C = models.ForeignKey(..)

我想要一个D和E字段,这些字段由以下公式计算得出:

  1. D = A-B
  2. E = A-X(其中X是模型C相关记录的字段)
    如果我不需要应用排序,则实现此操作将很简单。我只是将属性添加到模型类。但是,我需要按这些字段排序。

一种解决方案是将所有记录提取到内存中并在那里进行排序,我认为这是不得已的方法(这会破坏有关分页的内容)。

有没有办法实现我正在尝试的?任何指导表示赞赏。

编辑:非规范化是行不通的。字段X的值非常频繁地更改,并且许多Foo记录与模型C的一条记录有关。X的更新将需要E的数千次更新。


问题答案:

如果你不介意进行逻辑复制,则可以执行以下操作:

Foo.objects.extra(select={'d_field': 'A - B'}).extra(order_by=['d_field'])


 类似资料:
  • 问题内容: 一些代码和我的目标 我的(简化)模型: 我的目标 :我想按物业排序。我尝试了两种方法。 使用order_by QuerySet API 这产生了以下模板错误: 使用dictsort模板过滤器 收到以下模板错误: 所以… 我应该怎么做呢? 问题答案: 与一起使用,以定义一个新字段,并对该字段进行排序。 那,或将其余部分返回的内容转换为列表,然后在其上使用。

  • 问题内容: 在Django中,假设我要遍历并打印结果,那么计算对象的最佳选择是什么?还是? (此外,考虑到在同一迭代中对对象进行计数也不是一个选择。) 问题答案: 尽管Django文档建议使用而不是: 注意:如果要确定的是记录集中的记录数,请不要在QuerySet上使用。使用SQL的在数据库级别处理计数效率更高,而Django为此提供了一种方法。 由于无论如何都要迭代此QuerySet,结果将被缓

  • 问题内容: 我正在编写一个具有People模型的Django应用程序,但遇到了麻烦。我正在使用“多对多”关系将角色对象分配给人们- 角色具有名称和权重。我希望按角色最重的顺序来排列我的人员清单。如果我执行People.objects.order_by(’-roles__weight’),那么当人们被分配了多个角色时,我会得到重复。 我最初的想法是添加一个称为 最重角色权重 的非规范化字段- 并以此

  • 问题内容: 给定一堂课: 是否有可能(如果有的话)拥有一个基于动态参数进行过滤的QuerySet?例如: 问题答案: Python的参数扩展可用于解决此问题: 这是一个非常常见且有用的Python习惯用法。

  • 问题内容: 我正在使用Swift和Core Data构建应用程序。在我的应用程序中的某一点上,我想展示一下持久存储中当前类型的所有对象。目前,我正在检索它们,并使用来在表格视图中显示它们。我希望表视图按子类的计算属性进行排序,如下所示: 在我的表视图控制器,我建立我的如下: 像这样设置它会使我的应用程序崩溃,并在日志中显示以下消息: 当我取出第一个排序描述符时,我的应用程序运行正常,但是我的表视图

  • 问题内容: 我有一个模特 我试图这样做来计算此查询集中的总和: 此查询有什么问题?还是有其他方法可以计算列总和? 我知道这可以通过在queryset上使用for循环来完成,但是我需要一个优雅的解决方案。 问题答案: 你可能正在寻找