2012-03-08 5 views
0

私は複数のトラッキングIDを保持するテーブルを持っています。私がしようとしているのは、すべてのトラッキングIDをグループ化し、それらのカウントを取得することです。djangoで適切なgroupbyクエリを実行する方法

これは、SQLクエリは次のようになります。

SELECT tracking_id, COUNT(*) 
FROM tracking 
GROUP BY tracking_id 

私は、しかし、私は何かが欠けていることだし、現在はエラーに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, }) 

:ここ

は、私の見解は次のようになります!

答えて

1

方法(一部の@第二の答えに触発さ)について:

users = Tracking.objects.values('tracking_id').annotate(dcount=Count('tracking_id')) 

、その後

for user in users: 
    stats.append((user[ 'tracking_id' ], user[ 'dcount' ]))  

+0

'all()'は不必要です。 –

+0

はい、私はそれを修正しました:ありがとうございました:) – kgr

+1

'.values_list( 'tracking_id'、 'dcount')で終わることで、タプルのリストを直接得ることができます。 – second

0

このような時のために、私は貝に

./manage.py 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}, ...] 

システムパスでプロジェクトのコードをPythonシェルを開きます返されたデータを取得してあなたを手に入れよう

また、(コードrunserverがコードを提供していると仮定して)ビューコードにpdb(pythonデバッガ)文を追加してページをロードすることができます。 pdbステートメントに達すると、サーバは停止し、ビューの文脈でデバッガシェルに落とします。

def view(request): 
    [...] 
    import pdb; pdb.set_trace # or even better, pip install ipdb and use instead 

    return "foo" 
+0

' django-admin .pyシェル '?私が './manage.py shell'を実行しようとすると、' -bash:./manage.py:No such file or directory'というエラーが出ます。 – bigmike7801

+0

いいえ。どのようにあなたの 'runserver'を起動していますか?それは 'python manage.py shell'かもしれません。 – second

関連する問題