当前位置: 首页 > 面试题库 >

Django:按日期分组(日,月,年)

东云
2023-03-14
问题内容

我有一个像这样的简单模型:

class Order(models.Model):
    created = model.DateTimeField(auto_now_add=True)
    total = models.IntegerField() # monetary value

我想输出按月细分:

  • 一个月内有多少笔交易(COUNT
  • 合并值(SUM

我不确定最好的攻击方法是什么。我已经看到了一些看上去很吓人的额外选择查询,但我的简单想法是告诉我,最好是迭代数字,从任意开始的年/月开始,一直计数到我达到当月,然后简单地抛出查询该月的过滤条件。更多数据库工作-减轻开发人员压力!

什么对你最有意义?有什么好方法可以拉回快速数据表吗?还是我的肮脏方法可能是最好的主意?

我正在使用Django 1.3。不知道他们最近是否添加了更好的方法GROUP_BY


问题答案:

Django 1.10及更高版本

Django文档列表extra作为近期内取消。(感谢指出@seddonym @ Lucas03)。我打开了一张票,这就是jarshwah提供的解决方案。

from django.db.models.functions import TruncMonth
from django.db.models import Count

Sales.objects
    .annotate(month=TruncMonth('timestamp'))  # Truncate to month and add to select list
    .values('month')                          # Group By month
    .annotate(c=Count('id'))                  # Select the count of the grouping
    .values('month', 'c')                     # (might be redundant, haven't tested) select month and count 

旧版本

from django.db import connection
from django.db.models import Sum, Count

truncate_date = connection.ops.date_trunc_sql('month', 'created')
qs = Order.objects.extra({'month':truncate_date})
report = qs.values('month').annotate(Sum('total'), Count('pk')).order_by('month')

编辑

  • 增加数量
  • 添加了Django> = 1.10的信息


 类似资料:
  • 我有以下课程: 我想绑定一个可观察的收藏 ---年 ------月 ---------一天 因此,如果我的收藏中有3个条目的输入日期分别为2012-12-30、2012-12-31和2013-01-01,则if将获得以下树状图结构: ---2012 ------12 ---------30 ---------31 ---2013年 ------01 ---------01 理想情况下,我希望树视图

  • 本文向大家介绍django实现日志按日期分割,包括了django实现日志按日期分割的使用技巧和注意事项,需要的朋友参考一下 settings文件中配置: 项目启动时,win系统下,添加 --noreload :python manage.py runserver --noreload ,防止PermissionError报错; pycharm使用时,在此添加参数 补充知识:logback输出日志:

  • 问题内容: 有人可以向我解释为什么以下过滤器在月份和日期级别不起作用吗?按年份进行过滤似乎有效,但其他两个方法却无效。 快速更新以演示在创建和处理查询集之前我得到了相同的行为: 这里有更多值得深思的地方: 问题答案: Django文档给出了将时区定义安装到数据库的指令: SQLite:安装-转换实际上是在Python中执行的。 PostgreSQL:无要求(请参阅时区)。 Oracle:无要求(请

  • 问题内容: 我想要 但是这个查询不能使用 如何使用SQLAlchemy做到这一点? 问题答案: 假设您的数据库引擎实际上支持诸如之类的功能,则可以尝试 否则你可以像

  • 问题内容: 我正在使用MySQL,并且具有下表: 我希望能够生成这样的报告,其中在过去4周内完成了各个周期: 或最近3个月内: 有什么想法可以进行选择查询以生成等效的日期范围和点击次数吗? 问题答案:

  • 感谢所有人!