Django我怎样才能得到一个每周平均的查询

2024-05-23 20:06:15 发布

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

我有两个模型是相连的。为了简单起见,下面是一个子集:

class Job(models.Model):
    event = models.OneToOneField(Event, on_delete=models.CASCADE, null=False, blank=False)
    completion_time = models.DateTimeField(db_index=True, null=True, blank=True)
    labor_price = models.FloatField(verbose_name='Final Labor Price', blank=True, null=True)

以及:

^{pr2}$

我需要得到一些东西,我知道它们可以在SQL中完成,但我不知道如何在django中实现它们。我需要每月和每周的平均工作。换句话说,像这样的事情,我可能对我正在做的事情有错误,因为我还没有测试过:

SELECT `schedule_event.start_time`, AVG(`jobs_job.labor_price`)
FROM jobs_job
INNER JOIN schedule_event on jobs_job.event_id = schedule_event.id
GROUP BY YEAR(`schedule_event.start_time`), MONTH(`schedule_event.start_time`)
HAVING COUNT(`schedule_event.start_time`) = DAY(LAST_DAY(`schedule_event.start_time`));

我还需要得到一周的平均每小时劳动力价格,但我不太确定这是怎么回事。它将是一个查询,对给定的日期过滤器执行类似average(labor_price/(completion_time - event__start_time))的操作。在


Tags: eventfalsetruetimeonmodelsjobsjob
1条回答
网友
1楼 · 发布于 2024-05-23 20:06:15

我还没有对此进行测试,或者有时间研究一周的平均每小时劳动力价格,但我相信以下内容应该可以为您提供每周和每月的平均劳动力价格:

from datetime import datetime
from django.db.models import Avg

now = datetime.now()

weekly_avg = Job.objects.filter(event__end_time__lte=now, event__start_time__gt=now-datetime.timedelta(days=7)).values('labor_price').aggregate(Avg('labor_price'))
monthly_avg = Job.objects.filter(event__end_time__lte=now, event__start_time__gt=now-datetime.timedelta(days=30)).values('labor_price').aggregate(Avg('labor_price'))

相关问题 更多 >