Python Django注释每天的时间范围
我使用以下查询获取每天的金额:Python Django注释每天的时间范围,python,django,django-annotate,Python,Django,Django Annotate,我使用以下查询获取每天的金额: orders = OrderM.objects.filter(user=request.user) \ .annotate(day=TruncDay('datetime_added')) \ .values('day') \ .annotate(sum=Sum(F('orderd__good_count'))) \ .ord
orders = OrderM.objects.filter(user=request.user) \
.annotate(day=TruncDay('datetime_added')) \
.values('day') \
.annotate(sum=Sum(F('orderd__good_count'))) \
.order_by('-day')
正如预期的那样,每天在午夜00:00改变!我希望更改此行为,以便在每天的06:00到06:00期间生成总和。我认为使用datetime\uuu range=..
就可以了,但我对django查询没有经验
谢谢…这似乎可以解决问题:
from django.db.models import DateTimeField, ExpressionWrapper, F
from django.utils.timezone import timedelta
expression = F('datetime_added') - timedelta(hours=6)
wrapped_expression = ExpressionWrapper(expression, output_field=DateTimeField())
orders = OrderM.objects.filter(user=request.user) \
.annotate(day=TruncDay(wrapped_expression)) \
.values('day') \
.annotate(sum=Sum(F('orderd__good_count'))) \
.order_by('-day')
TruncDay('datetime_added')
的时间部分定义为午夜00:00。
因此,在截断之前,我们必须从每个datetime
字段中减去6小时。下面的内容实际上会在早上6点之后更改一天的部分
`TruncDay( F('datetime_added') - timedelta(hours=6) )`
ExpressionWrapper
的使用非常重要,因为我
表达式包含混合类型。您必须设置输出字段
,否则(我不知道为什么!)。这似乎可以解决问题:
from django.db.models import DateTimeField, ExpressionWrapper, F
from django.utils.timezone import timedelta
expression = F('datetime_added') - timedelta(hours=6)
wrapped_expression = ExpressionWrapper(expression, output_field=DateTimeField())
orders = OrderM.objects.filter(user=request.user) \
.annotate(day=TruncDay(wrapped_expression)) \
.values('day') \
.annotate(sum=Sum(F('orderd__good_count'))) \
.order_by('-day')
TruncDay('datetime_added')
的时间部分定义为午夜00:00。
因此,在截断之前,我们必须从每个datetime
字段中减去6小时。下面的内容实际上会在早上6点之后更改一天的部分
`TruncDay( F('datetime_added') - timedelta(hours=6) )`
ExpressionWrapper
的使用非常重要,因为我
表达式包含混合类型。您必须设置输出字段
,否则(我不知道为什么!)