2012-04-14 6 views
1

posted_dateのフィールドがdatetime.datePostモデルがあります。私は毎日何人の投稿がユーザによって作られたのかを知る必要があります。毎日のクエリを作成することは愚かなようです。Djangoで注釈を付けて毎日投稿する件数を取得するにはどうすればよいですか?

アノテーションを使用して集計APIクエリを作成する方法を理解できませんでした。

Post.objects.filter(author=someuser).annotate(dailycount=Count('posted_day')) 

正しい方法ですか?次に、特定の日に投稿数を取得するにはどうすればよいですか?

私のモデルは次のとおりです。

class Post(models.Model): 
    posted_day=models.DateField(default=date.today) 
    author=models.ForeignKey(User,null=True) 

答えて

1

あなたはほとんどそこにあります。 values('posted_day')は、グループ化を可能にし、そして空のorder_byは、デフォルトの順序が干渉しないように、結果はposted_dayで注文されることを保証

day_counts = Post.objects.filter(author=someuser).values('posted_day').annotate(
             dailycount=Count('posted_day')).order_by() 

:あなたは、2つの追加の句が必要です。

これの最も明瞭なドキュメントは、Order of annotate() and values() clausesDjango Aggregation docsセクションにあるようです。

last_day_dict = day_counts[-1] 
date = last_day_dict['posted_day'] 
count = last_day_dict['dailycount'] 

あなたはその後、次のことができます。あなたは、ユーザーが投稿最後の日は、それがリストの最後の項目になりたい場合はそう

[{'posted-day': 'the-first-day', 'dailycount': 2}, . . . , 
{'posted-day': 'the-last-day', 'dailycount': 3}] 

valuesのようなdictslist返しますdatetoday()と比較して一致するかどうかを確認し、ユーザーが今日投稿していない場合は、彼が投稿した場合はcount回転記します。

+0

返されたクエリーセットから返信してくれてありがとう、 'datetime.date.today()'と呼ばれる 'day1'の投稿数を確認するにはどうすればよいですか? – damon

+0

@damon私は私の答えに多くの情報を加えました。 – agf

+0

多くのありがとう@agf – damon

関連する問題