【发布时间】: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
【问题讨论】:
使用这样的模型:
class User(models.Model):
entered = models.DateTimeField(auto_now_add=True)
如何获取统计数据,以便显示过去 30 天内最近添加的用户以及当天添加的用户数量。
例子:
2010-08-02: 220
2010-08-08: 1220
2010-08-14: 20
【问题讨论】:
更新:
这个答案没有用。由于entered 是DateTimeField,因此对于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 %}
【讨论】:
return render_to_response('my_template.html', context, context_instance = RequestContext(request))