Django - 按组注释加权平均值

2024-02-23

我有以下在 SalesRecord 上运行的模型管理器:

def by_variety_and_date(self, start_date, end_date):
    return self.model.objects.filter(
        date__range=(start_date, end_date)
    ).values(
        "variety"
    ).annotate(
        qty_applied=Sum('qty_applied'),
        margin=Avg('margin')
    )

我真正想要的是margin=Avg('margin')返回一个weighted平均,基于qty_applied。有没有办法用 Django 的注释/聚合查询来做到这一点?我一直在尝试将 .aggregate() 串起来直到最后,但我仍然想要每个的平均值variety如该查询集所描述。

本例中的模型如下所示:

class Sale(models.Model):
    margin = models.DecimalField(null=True, blank=True, decimal_places=2, max_digits=12)
    qty_applied = models.IntegerField(null=True, blank=True)
    variety = models.ForeignKey(Variety, null=True)
    totals = Totals()

EDIT

这就是我最终得到的结果。这有点奇怪,但它确实有效。

def by_variety_and_date(self, start_date, end_date):
    return self.model.objects.filter(
        date__range=(start_date, end_date)
    ).values(
        "variety"
    ).annotate(
        qty_applied=Sum('qty_applied'),
        profit=Sum('profit'),
        cogs=Sum('cogs'),
        sales=Sum('value'),
        margin=Sum(
            (F('qty_applied')*F('margin')), output_field=FloatField()
        ) / Sum(
            'qty_applied', output_field=FloatField())
    )

我使用 F 对象作为@WTower https://stackoverflow.com/users/940098/wtower建议将每个对象的margin由其qty_applied,然后将整个东西包裹在一个Sum并将其除以Sum of the qty_applied组中的所有对象。奇迹般有效!


您可以使用F()表达 https://docs.djangoproject.com/en/1.9/ref/models/expressions/#f-expressions

>>> from django.db.models import F, FloatField, Sum
>>> MyModel.objects.all().aggregate(
...    w_avg=Sum((F('a')*F('b'))/F('b'), output_field=FloatField()))

有关聚合的更多信息here https://docs.djangoproject.com/es/1.9/topics/db/aggregation/#cheat-sheet.

或者,您可以使用自定义 SQL (not推荐)或管理器中的自定义方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django - 按组注释加权平均值 的相关文章

随机推荐

  • 查询 Android 日历甚至可以检索已删除的事件

    我正在使用下面提到的代码从保存在 Android 本地日历应用程序中的所有日历中检索所有事件 现在 如果我从本机日历中删除某个事件 我的代码仍然会获取并显示该事件 这怎么可能 它是否设置了一些删除标志而不是实际删除事件 Cursor cur
  • C - 使用 select() 时如何限制服务器中的入站连接数

    我对 C 套接字编程还是新手 但我能够创建一些简单的客户端和服务器程序 我正在编写一个监听 TCP 连接的服务器 它的职责是响应客户端的请求 然后在客户端发送特殊的字节序列时 当然 或者当它断开连接时 关闭通信 我开始使用以下代码对服务器进
  • css 规则在 iOS9 上无法正常工作

    我对 iOS9 有一个关于网站 CSS 的问题 css 规则在 Android 和 iOS 8 上运行良好 但在 iOS9 上 网站出现混乱 这就是ios 8和ios 9的区别 可能的问题是什么 我该如何解决这个问题 感谢帮助 css se
  • Dropbox 文件唯一标识符 - RESTful API

    是否存在与 Dropbox 文件关联的唯一标识符 该标识符不会因修订 更改 重命名而更改 并且可以通过 RESTful API 进行访问 我想将它存储在数据库中并跟踪文件上的一些操作 不幸的是 不 Dropbox API 目前不公开任何类型
  • Java中将字符串转换为URL标准字符串

    我有一个字符串 例如 Cerepedia una apliaci n web 我想将其转换为有效的 URL 例如 Cerepedia unaaplicacionweb Note 特殊字符转换和空格删除 顺便问一下 URL 中允许使用逗号吗
  • Ionic:未定义不是构造函数 FileReader

    创建 FileReader 来自 ionic native file 实例时遇到问题 let f new FileReader 出现以下错误 TypeError undefined is not a constructor evaluati
  • 如何列出 Win32.DLL 中的可用方法

    我有一个 DLL 文件 其中包含一些我想在应用程序中调用的有用函数 我不再有它的文档了 如何发现 DLL 导出的函数及其方法签名 是否有列出函数及其参数的实用程序 转储箱 出口 Dumpbin http msdn microsoft com
  • 你能在同一对象的非重叠区域之间进行memcpy吗?

    C17 说以下内容memcpy 7 24 2 1p2 memcpy函数将s2指向的对象中的n个字符复制到指向的对象中 通过 s1 如果复制发生在objects重叠 行为是未定义的 常见的解释是您不能复制重叠的内存区域 但这并不完全相同 因为
  • jQuery UI 对话框不会关闭

    在我的网页上有一个按钮可以打开模式 jQuery 对话框 单击按钮时运行的代码如下 main onoffline container append div div dialog modal a dialog title Add Tags a
  • 如何在 Dreamweaver 中使用 javascript 使元素固定在某个点

    我知道有很多与此类似的问题 但在 Dreamweaver 中似乎没有一个解决方案适合我 任何人都可以提供 JavaScript 代码或我可以轻松插入到 Dreamweaver 文件中的内容吗 我需要应用它的代码如下 div div
  • 原子别名交换在完全不相关的索引上失败并出现 index_not_found_exception

    我想以零停机时间进行替换和索引 如中所述ES 文档 https www elastic co guide en elasticsearch guide current index aliases html 我这样做是通过 创建一个新索引my
  • 如何使用 django-simple-history 恢复更改,特别是删除

    We have django simple history为我们的模型设置 最近一大堆模型被神秘删除 这是在事后几天注意到的 因此最好避免完整的数据库备份恢复 因为这会擦除事后发生的手动更改 我找不到任何方法来轻松恢复模型实例 特别是已删除
  • Tkinter 显示扭曲的图像

    我正在尝试使用 Tkinter 显示 gif 但是当 gif 加载时 它看起来很奇怪 我已经粘贴了原始 gif 和 Tkinter 中显示的 gif 的屏幕截图 这种情况不仅仅发生在一张 gif 中 而是出现在我使用的每一张 gif 中 G
  • 我们可以在 Android 中使用缩放手势检测器进行捏缩放吗?

    我们可以在 Android 中使用缩放手势检测器进行捏缩放吗 您可以创建一个可重用的类来实现OnTouchListener来实现这一目标 public class MyScaleGestures implements OnTouchList
  • 在 Windows/mingw 上,`fcntl(fd, F_GETFL) | 等价于什么? O_ACCMODE`?

    我正在 Windows 上用 Mingw 编译一个程序 如何获取打开的文件描述符的访问模式 根据Win32 hlp API提供了该功能BOOL GetFileInformationByHandle HANDLE hFile LPBY HAN
  • 无法编译 parquet-tools

    我克隆了存储库parquet mr from 这个链接 http git 20clone 20https github com Parquet parquet mr git 我想要建造的parquet tools正如所解释的here htt
  • Python file.write 创建额外的回车符

    我正在使用 python 将一系列 SQL 语句写入文件 模板字符串如下所示 store insert tinsert stores storenum values s 我像这样写入文件 for line in source line li
  • 如何衡量字符串之间的相似度?

    我有很多名字 我想获得唯一的名字 然而 由于拼写错误和数据不一致 名称可能写错 我正在寻找一种方法来检查字符串向量是否其中两个相似 例如 pres lt c Obama B Bush G W Obama B H Clinton W J 我想
  • 无法设计全授权工作

    我需要访问 google API 我试图让用户使用 Devise 2 1 1 和 Omniauth 使用 gemgoogle oauth2因为 OAuth2 是 Google 文档推荐的 不幸的是我无法让它工作 这是routes rb Te
  • Django - 按组注释加权平均值

    我有以下在 SalesRecord 上运行的模型管理器 def by variety and date self start date end date return self model objects filter date range