1

のフィールドを持つPostモデルがあります。ユーザーが毎日何件の投稿を行っているかを調べる必要があります。毎日のクエリを作成するのはばかげているようです。datetime.dateposted_date

注釈を使用して集計 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)
4

1 に答える 1

1

あなたはほとんどそこにいます。追加の句が 2 つ必要です。

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

values('posted_day')グループ化を有効にし、空の場合order_byは結果が並べ替えられることを保証するposted_dayため、デフォルトの並べ替えは干渉しません。

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

valueslist次のような値を返しますdicts:

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

したがって、ユーザーが最後に投稿した日が必要な場合は、リストの最後の項目になります。

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

次に、それらが一致するかどうかを比較datetoday()て確認できます。一致しない場合、ユーザーは今日投稿していません。一致している場合は、count時間を投稿しました。

于 2012-04-14T20:06:28.723 に答える