django如何获得每周平均查询集

时间:2017-01-25 17:07:23

标签: python django

我有两个链接的模型。这是一个简单的子集:

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)

class Event(models.Model):
    start_time = models.DateTimeField(db_index=True, null=True, blank=True)
    end_time = models.DateTimeField(db_index=True, null=True, blank=True)

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

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))的操作。

1 个答案:

答案 0 :(得分:1)

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

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'))