Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django注释每天的时间范围_Python_Django_Django Annotate - Fatal编程技术网

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
的使用非常重要,因为我

表达式包含混合类型。您必须设置输出字段

,否则(我不知道为什么!)