在Python Django中的另一列中的两个日期之间获取列中的值

在Python Django中的另一列中的两个日期之间获取列中的值,python,django,date,Python,Django,Date,请使用Python Django函数请求函数获取并计算两个时间段之间的值 数据库示例如下所示 案例(1)开始时间=2019年11月1日结束时间=2019年12月15日费率=35.00 案例(2)开始时间=2019年12月16日结束时间=2019年12月31日费率=50.00 我需要函数来计算速率,如下所示: 用户将申请从2019年12月13日至2019年12月18日的期限 计算的利率[(12月13、14、15日)=35+35+35=105]+[(16、17、18日) 12月=50+50+50

请使用Python Django函数请求函数获取并计算两个时间段之间的值

数据库示例如下所示

  • 案例(1)开始时间=2019年11月1日结束时间=2019年12月15日费率=35.00

  • 案例(2)开始时间=2019年12月16日结束时间=2019年12月31日费率=50.00

我需要函数来计算速率,如下所示:

用户将申请从2019年12月13日至2019年12月18日的期限 计算的利率[(12月13、14、15日)=35+35+35=105]+[(16、17、18日) 12月=50+50+50=150],最终总费率为255

class Items(models.Model): 
  name = models.CharField(max_length=200, db_index=True)

class Item(models.Model): 
  name = models.ForeignKey(Items, on_delete=models.CASCADE)
  start_date = models.DateField()
  end_date = models.DateField()
  rate = models.DecimalField(max_digits=3, decimal_places=2)

我想这就是你要找的。但是,我会担心有多个
实例覆盖相同的日期范围。如果这是真的,那么下面的函数将无法正常工作

request_lower = some_date
request_upper = some_other_date

items_within_range = Item.objects.filter(
    Q(start_date__lte=request_lower, end_date__gt=request_lower)
    | Q(start_date__lte=request_upper, end_date__gt=request_upper)
)

total = 0
for index in range((request_upper - request_lower).days):
    # Iterate over the days from lower to upper.
    date = request_lower + timedelta(days=index)
    # Find the Item instance that the date is within the range.
    total += [
        i.rate for i in items_within_range
        if i.start_date <= date < i.end_date
    ][0]
request\u lower=某个日期
请求日期=某些日期
\u范围内的项目=Item.objects.filter(
Q(开始日期=请求较低,结束日期=请求较低)
|Q(开始日期=请求上限,结束日期=请求上限)
)
总数=0
对于范围内的索引((请求上限-请求下限)。天):
#从低到高迭代几天。
日期=请求时间+时间差(天数=索引)
#查找日期在范围内的项目实例。
总数+=[
i、 项目中i的费率在\u范围内

如果i.start\u date如果我有多个实例,我可以做什么取决于您希望发生什么。如果我有两个项目,例如(标准客房和豪华客房),日期相同但费率不同,您希望发生什么?