我有两个链接的模型。这是一个简单的子集:
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))
的操作。
答案 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'))