如何在django中通过查询做一个合适的组

时间:2012-03-08 16:54:12

标签: python django django-models django-templates

我有一个表格,其中包含多个跟踪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, })

任何帮助将不胜感激!

2 个答案:

答案 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"