【问题标题】:Django last thirty days added with numberDjango过去三十天添加了数字
【发布时间】:2010-08-14 04:43:16
【问题描述】:

使用这样的模型:

class User(models.Model):
    entered = models.DateTimeField(auto_now_add=True)

如何获取统计数据,以便显示过去 30 天内最近添加的用户以及当天添加的用户数量。

例子:

2010-08-02: 220
2010-08-08: 1220
2010-08-14: 20

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

    更新

    这个答案没有用。由于enteredDateTimeField,因此对于entered 的每个值,查询将最终计数为1。这不是 OP 想要的。 (感谢dannyroa

    entered 的类型更改为DateField 应该会有所帮助。

    原答案

    您可以使用 Django 的 aggregation 功能来执行此操作。像这样的:

    from django.db.models import Count
    q = User.objects.annotate(Count('entered')).order_by('-entered')
    for user in q[0:30]:
        print "%s %s" % (user.entered, user.entered__count)
    

    更新

    您可以对查询集进行切片,然后将其传递给模板。

    # View 
    def my_view(*args, **kwargs):
        queryset = User.objects.annotate(Count('entered')).order_by('-entered')
        context = dict(queryset = queryset[0:30])
        return render_to_response('my_template.html', context_instance = RequestContext(request, context))    
    
    # Template
    {% for user in queryset %}
        <td>{{ user.entered }}</td>
        <td>{{ user.entered_count }}</td>
    {% endfor %}
    

    【讨论】:

    • 谢谢,愚蠢的问题,如何将 q[0:30] 数据转移到模板中
    • 将您的上下文作为字典参数传递,而不是使用 RequestContext:return render_to_response('my_template.html', context, context_instance = RequestContext(request))
    • 我没有测试过代码但是结果不会是这样吗? 2010-08-02 06:00:01:1 2010-08-02 06:10:10:1 2010-08-01 12:00:01:1 2010-08-01 12:10:10:1 它将按日期时间分组,而不仅仅是按日期分组,因此计数始终为一。
    猜你喜欢
    • 2018-03-04
    • 2021-08-25
    • 2021-08-30
    • 2013-03-23
    • 2013-05-18
    • 2022-06-10
    • 2020-03-26
    • 1970-01-01
    • 2021-01-09
    相关资源
    最近更新 更多