【问题标题】:Python Django Queryset only get month and year from datePython Django Queryset 仅从日期获取月份和年份
【发布时间】:2019-06-30 01:48:41
【问题描述】:

我目前使用以下代码为我的 Fusioncharts 条形图创建查询集:

 dataSourceBar['data'] = [] 

    objects_with_category_id_2 = dashboard_input.objects.filter(service_service_id=3,category_category_id=2)

    for obj in objects_with_category_id_2:
        data =  {'label': obj.session_start.strftime("%m.%Y"),
                 'value': obj.input_input_value}
        dataSourceBar['data'].append(data)  

我试图只从 session_start 中获取月份和年份,但现在它只显示每个日期的每个月份和年份。

有没有一种方法可以设计查询集,将每月的不同值相加(按降序排列)?所以图表只显示三个条:04.2019、05.2019 和 06.2019?

【问题讨论】:

    标签: python django django-queryset fusioncharts


    【解决方案1】:

    是的,您可以使用TruncMonth [Django-doc]Sum [Django-doc]进行注释和总结:

    from django.db.models import Sum
    from django.db.models.functions import TruncMonth
    
    dashboard_input.objects.filter(
        service_service_id=3,
        category_category_id=2
    ).annotate(
        label=TruncMonth('session_start')
    ).values('label').annotate(
        value=Sum('input_input_value')
    ).order_by('label')

    这将产生一个包装字典的QuerySet。每个字典都有一个 'label' 键,该键映射一个截断到月份的 date(..) 对象,以及一个映射到该月 'input_input_value' 值总和的 'value' 键。

    【讨论】:

    • 感谢您的评论,但 SUM 函数出现错误:ProgrammingError: function sum(character varying) 不存在。我需要在 for 循环中使用哪些值才能使其正常工作?
    • @Natasja:等一下,你用CharField 代替input_input_value?那不应该是IntegerFieldDecimalFieldFloatField吗?
    • 是的,它应该,但我现在不能更改它,而不必重新创建我的表并丢失数据。但是 for 循环不应该足以对我的输入数据求和吗?
    • @Natasja:Sum(..) 的重点是您在数据库级别运行它,从而加快总和。
    • 但是我应该在我的 for 循环中使用什么值才能使其工作?我继续使用 session_start 但这给了我一个错误。 response = Wrapped_callback(request, *callback_args, **callback_kwargs) 文件“C:\var\www\VSDK\vsdk\dashboard\views.py”,第 36 行,图表数据 = {'label': obj.session_start.strftime ("%m.%Y"), AttributeError: 'dict' object has no attribute 'session_start' @WillemVanOnsem
    猜你喜欢
    • 2020-11-11
    • 2017-01-19
    • 2017-06-25
    • 2012-02-16
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 2016-04-14
    • 2010-12-19
    相关资源
    最近更新 更多