gpt4 book ai didi

python - django 在聚合期间对字段执行逻辑(而不是直接进行聚合(Sum ('somefield' )))

转载 作者:太空宇宙 更新时间:2023-11-03 19:03:26 26 4
gpt4 key购买 nike

代码:

MyModel(models.Model):
start_date = models.DateTimeField()
end_date = models.DateTimeField()
name = models.CharField()
somenum = models.IntegerField()

如果我想计算所有“somenum”(上述模型中的最后一个字段)的总和,那么我可以这样做:

queryset.aggregate(Sum('somenum'))

我的要求:

(结束日期-开始日期)的总和(意味着结果是天数),不包括(星期六和星期日)。

我可以使用正常逻辑来做到这一点,但我认为聚合或其他方式是首选。

我知道的方式:

  1. 循环查询集中的每条记录,计算每条记录的天数(不包括星期六、星期日),并在循环中求和(如循环前 sum=0,循环内 sum += current_value; )。
  2. 在保存模型时写入执行此计算(求和)的信号,并将计算值保存到 UserProfile。当我们想要值(value)时,我们可以从 UserProfile 中获取它,但我认为这个过程是有问题的。
  3. 为上面所示的 MyModel 添加另一个字段“num_of_days”,每当保存模型时,信号都应执行计算并保存该字段。然后我们可以使用 queryset.aggregate(Sum('num_of_days')) 。

最佳答案

  1. 每次想要这些数据时,都必须在Python中查询所有MyModel并求和;这既不高效也不可扩展。
  2. 为什么您要将天数保存到 UserProfile 中,该天数似乎属于 MyModel 中?
  3. 我认为这应该是首选方法。它简单、优雅、易于操作。通过这样做,您可以将聚合放入数据库

关于python - django 在聚合期间对字段执行逻辑(而不是直接进行聚合(Sum ('somefield' ))),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15449808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com