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

2024-05-23 16:57:08 发布

您现在位置:Python中文网/ 问答频道 /正文

代码:

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

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

queryset.aggregate(Sum('somenum'))

我的要求:

(enddate startdate)之和(表示结果为天数),不包括(周六和周日)。你知道吗

我可以用正常的逻辑来做这件事,但我认为聚合或其他方式更可取。你知道吗

我知道的方式:

  1. 循环queryset的每条记录,计算每条记录的天数(不包括星期六、星期天),循环期间求和(如循环前的sum=0,循环内的sum+=current_value;)。你知道吗
  2. 在保存模型时写入执行此计算(求和)的信号,并将计算值保存到UserProfile。当我们需要值时,我们可以从UserProfile获得它,但我认为这个过程有缺陷。你知道吗
  3. 为上面显示的MyModel添加另一个字段“num\u of \u days”,每当保存一个模型时,信号应该执行计算并保存该字段。然后我们可以用查询集合(Sum('天数'))。你知道吗

Tags: 代码模型date信号models方式记录mymodel
1条回答
网友
1楼 · 发布于 2024-05-23 16:57:08
  1. 每次需要这些数据时,都必须用python查询所有MyModel和sum;这既不高效,也不可扩展。你知道吗
  2. 为什么要保存到UserProfile似乎天数属于MyModel?你知道吗
  3. 我认为这应该是首选的方法。它简单,优雅,易于操作。通过这样做,可以将聚合放在数据库中

相关问题 更多 >