我有一个表格,其中包含多个跟踪ID。我要做的就是将所有追踪ID分组并为其计算。
这就是SQL查询的样子:
SELECT tracking_id, COUNT( * )
FROM tracking
GROUP BY tracking_id
我想我已经找到了在django中执行此操作的正确方法,但我错过了一些内容并且目前正在收到错误Exception Value: 'dict' object has no attribute 'tracking_id'
以下是我的观点:
def stats(request):
users = Tracking.objects.values('tracking_id').annotate(dcount=Count('tracking_id'))
stats = []
for user in users:
stats.append((user.tracking_id, user.dcount))
return render_to_response('tracking/stats.html', { 'stats': stats, })
任何帮助将不胜感激!
答案 0 :(得分:1)
如何(部分受@ second的回答启发):
users = Tracking.objects.values( 'tracking_id' ).annotate(dcount=Count('tracking_id'))
然后
for user in users:
stats.append((user[ 'tracking_id' ], user[ 'dcount' ]))
答案 1 :(得分:0)
在这样的时候,我建议你在shell中试用你的代码
./manage.py shell
打开一个python shell,其中包含系统路径中的项目代码
>>> from myapp.models import Tracking
>>> from django.db.models import Count
>>> Tracking.objects.values('tracking_id').annotate(dcount=Count('tracking_id'))
[{'tracking_id': 53, 'dcount': 12}, {'tracking_id': 1, 'dcount': 32}, ...]
这使您可以看到返回数据的格式并让您继续前进
或者,您可以在视图代码中添加pdb(python调试器)语句(假设runserver
正在为您的代码提供服务),并加载页面。当达到pdb语句时,您的服务器将停止并将您放入调试器shell中,就在视图的上下文中
def view(request):
[...]
import pdb; pdb.set_trace # or even better, pip install ipdb and use instead
return "foo"