我对 Django 休息框架和堆栈溢出非常陌生,我一直在努力寻找标题,所以请随时提供更好的选择。
我有一组发布到数据库的工作。这些作业现在按机器和给定小时分组。现在我只显示每小时的工作总数。我的 API 端点现在看起来像这样: Api 端点
这就是我苦苦挣扎的地方:我需要将工作的持续时间按小时分开。我有一个开始时的日期时间和结束时的日期时间。我也有总时长。例如:假设作业开始于 11h15,结束于 12h15。这意味着第 11 小时的总持续时间为 45 分钟。对于第 12 小时,持续时间为 15 分钟。
我想让时间在 11h15 和 12h00 之间过去,然后时间在 12h15 和 13h00 之间过去。但我不确定我怎么能做到这一点。另请注意,有些工作需要一个多小时,有些甚至超过一天。我确信在 python 中使用 timedelta 有一种特定的方法可以做到这一点。我只是没有足够的经验来理解这一点。
这是 API 端点的当前代码:
class MachineDurationViewSet(APIView):
authentication_classes = (SessionAuthentication, DataAppClientTokenAuthentication)
def get(self, request):
# get names of all machines
machine_names_queryset = Machine.objects.all()
machine_names = []
for obj in machine_names_queryset:
machine_names.append(obj.name)
machine_list = {}
sum = []
queryset = Job.objects.all()
# per machine, get dur for a given hour,use names to filter
for name in machine_names:
qs_grouped_per_machine = queryset.filter(machine__name=name)
queryset_machine_start = qs_grouped_per_machine.annotate(hour=ExtractHour('dt_start'))
queryset_machine_end = qs_grouped_per_machine.annotate(hour=ExtractHour('dt_end'))
for n in range(0,24):
job_start = queryset_machine_start.filter(hour=n)
for job in job_start:
print(job.dt_start)
sum.append(job_start.count())
machine_list[name] = sum
sum = []
return Response({"machines": machine_list, "machine_count": len(machine_names)})