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

Python django在聚合期间对字段执行逻辑(而不是直接进行聚合(Sum(';somefield';)),python,django,Python,Django,代码: 如果我想计算所有“somenum”(上述模型中的最后一个字段)的总和,那么我可以这样做: MyModel(models.Model): start_date = models.DateTimeField() end_date = models.DateTimeField() name = models.CharField() somenum = models.IntegerField() 我的要求: (enddate startdate)(表示结果为天数

代码:

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

MyModel(models.Model):
    start_date = models.DateTimeField()
    end_date = models.DateTimeField()
    name = models.CharField()
    somenum = models.IntegerField()
我的要求:

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

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

我知道的方式:

  • 循环queryset的每条记录,计算每条记录的天数(不包括周六、周日),并在循环期间对其求和(如循环前的sum=0,循环内的sum+=current_value;)
  • 在保存模型时写入执行此计算(求和)的信号,并将calculateed值保存到UserProfile。当我们需要值时,我们可以从UserProfile获得它,但我认为这个过程有缺陷
  • 为上面显示的MyModel添加另一个字段“num_of_days”,每当保存一个模型时,信号应执行计算并保存该字段。然后我们可以使用queryset.aggregate(Sum('num_of_days'))
  • 每次需要这些数据时,都必须用python查询所有
    MyModel
    和sum;这既不高效也不可扩展
  • 为什么要保存到
    UserProfile
    似乎天数属于
    MyModel
  • 我认为这应该是首选的方法。它简单、优雅、易于操作。通过这样做,您可以将聚合放在数据库上
  • 每次需要这些数据时,都必须用python查询所有
    MyModel
    和sum;这既不高效也不可扩展
  • 为什么要保存到
    UserProfile
    似乎天数属于
    MyModel
  • 我认为这应该是首选的方法。它简单、优雅、易于操作。通过这样做,您可以将聚合放在数据库上
  • queryset.aggregate(Sum('somenum'))