我搜遍了所有地方寻找答案,却找不到任何答案。也许这只是一个愚蠢的问题或一个非常棘手的问题。这是:
假设我的模型是这个(伪django代码):
Event
type = ForeignKey(EventType)
name = CharField
date_start = DateField
date_end = DateField
EventType
name = CharField
我想知道的是每种事件类型的平均持续时间。我现在所做的是计算创建新事件时的平均持续时间(保存方法)并将其存储在EventType的average_duration列中。这种方法的问题在于我无法回答诸如“X年期间 事件的平均持续时间是多少的问题”。因此,我不想添加更多列来回答这些问题,而是希望“实时”完成。
可以通过注释查询集来完成吗?首先,我必须得到每个事件类型的日期差异,然后得出它们的平均值,然后使用该平均值来注释事件查询集,我假设。
答案 0 :(得分:29)
只是一个更新。在Django> = 1.8中,可以这样做:
from django.db.models import F, ExpressionWrapper, fields
duration = ExpressionWrapper(F('date_end') - F('date_start'), output_field=fields.DurationField())
events_with_duration = Event.objects.annotate(duration=duration)
之后您可以运行以下查询:
events_with_duration.filter(duration__gt=timedelta(days=10))
答案 1 :(得分:1)
我认为最好的办法是创建一个带有date_end - date_start
列的SQL视图,在此视图上创建一个django模型,然后您就可以查询视图并根据需要对其进行注释。我已经用你的模型类似物完成了这个,如果你需要,我可以为你提取一些有趣的代码。
答案 2 :(得分:1)