Nic*_*s R 13 django date annotate django-queryset
我在各处搜索了一个答案但找不到任何东西.也许这只是一个愚蠢的问题或一个非常棘手的问题.这里是:
假设我的模型是这个(伪django代码):
Event
type = ForeignKey(EventType)
name = CharField
date_start = DateField
date_end = DateField
EventType
name = CharField
Run Code Online (Sandbox Code Playgroud)
我想知道的是每种事件类型的平均持续时间.我现在所做的是计算创建新事件时的平均持续时间(保存方法)并将其存储在EventType的average_duration列中.这种方法的问题在于我无法回答诸如" 在Y年期间 X型事件的平均持续时间是多少"这样的问题.因此,我不想添加更多列来回答这些问题,而是希望"实时"完成.
这可以通过注释查询集来完成吗?首先,我必须得到每种事件类型的日期差异,然后得出它们的平均值,然后用这个平均值注释事件查询集,我假设.
ryu*_*shi 35
只是一个更新.在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)
Run Code Online (Sandbox Code Playgroud)
之后您可以运行以下查询:
events_with_duration.filter(duration__gt=timedelta(days=10))
Run Code Online (Sandbox Code Playgroud)
我认为最好的选择是创建一个包含该date_end - date_start列的 SQL 视图,在此视图上创建一个 django 模型,然后您将能够查询该视图并根据需要对其进行注释。我已经用与您类似的模型完成了此操作,如果您需要,也许我可以为您提取一些有趣的代码。