Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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
如何为Django auth每天的注册量聚合条形图数据?_Django_Statistics_Analytics_Django Authentication_Django Aggregation - Fatal编程技术网

如何为Django auth每天的注册量聚合条形图数据?

如何为Django auth每天的注册量聚合条形图数据?,django,statistics,analytics,django-authentication,django-aggregation,Django,Statistics,Analytics,Django Authentication,Django Aggregation,Django auth用户模型有一个日期\u日期时间字段。这是否可以用于在一个日期范围内的天(或其他时间段)内聚合每天注册量的列表?例如:[(21.01,5),(22.01,7),(23.01,9),…] 最快的方法是什么?例如,如果条形图上的日期范围设置为过去3年 我看了,但不清楚如何使用时间戳分解对象。这是统计学中常见的设计模式。此问题与此问题类似: 像这样的方法应该会奏效: MyObject.objects.filter(date\u joined\u date\u range=(wee

Django auth用户模型有一个
日期\u
日期时间字段
。这是否可以用于在一个日期范围内的天(或其他时间段)内聚合每天注册量的列表?例如:
[(21.01,5),(22.01,7),(23.01,9),…]
最快的方法是什么?例如,如果条形图上的日期范围设置为过去3年


我看了,但不清楚如何使用时间戳分解对象。这是统计学中常见的设计模式。

此问题与此问题类似:

像这样的方法应该会奏效:
MyObject.objects.filter(date\u joined\u date\u range=(weekago,today)).annotation(registrations=Count('id')
以下是我用Django和CSS生成基于日期的条形图的代码

def date_barchart(model, date_field, operation='count', days=150, till=datetime.now()):   
    list = []
    i = 0
    while i < days:
        day = (till - timedelta(days=i), till - timedelta(days=i-1))
        date = time.strftime("%Y-%m-%d", day[0].timetuple())
        kwargs = {'%s__range' % date_field: day}
        qs = model.objects.filter(**kwargs)
        if operation == 'count':
            total = qs.count()
        else:
            total = qs.aggregate(Sum('amount'))
            total = total['amount__sum']
        if total > 0:
            list.insert(0, {'date': date, 'total': total, 'round_total': int(total)})

        i = i + 1
    return list
或者用于Satchmo电子商务

'barchart': date_barchart(Payment, 'time_stamp', 'sum', 150)
模板:

{% if barchart %}
<div class="barchart">
    <ol>
        {% for d in barchart %}
        <li><u style="height:{{ d.round_total }}px"><i>{{ d.date }}<br>
            <b>{{ d.total }}</b></i></u></li>
        {% endfor %}
    </ol>
</div>
{% endif %}

看起来和Google analytics一样好,但不需要透露我的性能数据。

不是真的,我将从datetime import datetime、timedelta和用户模型中获取datetime
,从django.contrib.auth.models import User中获取datetime
,现在我选择过去90天
past90d=(datetime.now()-timedelta(days=30),datetime.now()
现在我来试试你的提示:
signups=User.objects.filter(date\u joined\u date\u range=past90d)。annotate(registrations=Count('id'))
。这增加了:在日期加入时不允许加入。好的,我将去掉
日期范围=
只留下
\uu范围=
。没有骰子,这将返回一个用户对象列表,而不是具有注册计数的预期天数列表。有什么想法吗?如果您对如何加快此过程有任何想法,请告诉我。您可以缓存结果,将聚合保存到他们自己的模型中,运行某种后台聚合,这些类型的东西。。。
{% if barchart %}
<div class="barchart">
    <ol>
        {% for d in barchart %}
        <li><u style="height:{{ d.round_total }}px"><i>{{ d.date }}<br>
            <b>{{ d.total }}</b></i></u></li>
        {% endfor %}
    </ol>
</div>
{% endif %}
.barchart{width:100%;overflow:hidden}
.barchart u{display:inline-block;position:relative;vertical-align:bottom;width:5px;background:#6cc;border-right:1px solid #fff;text-decoration:none}
.barchart u i{display:none;position:absolute;background:#fff;border:1px solid #aaa;padding:5px;border-radius:5px;left:-6px;bottom:10px;width:60px;font-size:10px;font-style:normal;color:#000}
.barchart u:hover{background-color:#333}
.barchart u:hover i{display:inline-block;z-index:500}
.barchart li{margin:0;padding:0;list-style:none;display:inline-block}