2017-02-26 8 views
0

のは、私がモデルを持っているとしましょう:DjangoのORM - 関連オブジェクトのフィルタリング

class Post(models.Model): 
    user = models.ForeignKey(User, related_name='posts') 
    created = models.DateTimeField(auto_now_add=True) 

私はすべてのユーザーを照会し、それらのそれぞれのため、今日の記事のリストを持っていると思います。

ここでは、モデルメソッドを使用する方法や各ユーザーを反復する方法などの良い解決策がありますが、実際にはORMが使用されていないため、パフォーマンスはあまり良くありません。 User.objects.all().annotate(filtered_posts = ...)のような方法がありますか?

答えて

0

あなたは「今日の投稿」でクエリしたいと言いましたが、日時フィールドは表示されないので、私はそれを仮定します。さらに、関連する名前を変更する必要があります(他のモデルの観点から見た名前については、related_name='posts'が適切です)。

__などのクエリでは、関連するオブジェクトにアクセスできます。

User.objects.filter(posts__created=time) 

これは、今日作成された投稿を持つユーザーのクエリセットを返します。

例としてはtimeという変数を使用しましたが、別のことを説明します。たとえば、今日の真夜中から明日の深夜までの2要素タプルを提供するには、posts__created_at__rangeを使用するとよいでしょう。

+0

ああ、申し訳ありませんが、私は関連する名前で少し混乱し、日付フィールドを忘れました。私は今それを修正しました。 しかし、あなたは私を正しく理解していません。私は日付でユーザーをフィルタリングしたくないのですが、私は日付でフィルタされた投稿でUserオブジェクトをシリアル化する必要があります。 – hopheylalaley

+0

私が書いたコードを試しましたか?私はそれがあなたが記述しているものとまったく同じだと思います。特定の 'create'日付で作成された投稿を持つ' Users'を返します。あなたが 'User.objects.filter(created = time)'と言ったように 'Users 'を日付でフィルタリングし、私の例で' posts__created = time'を使用しました。もし私がここに間違っているなら、私はあなたに質問を言い換えて尋ねなければならないでしょう。 – McAbra

関連する問題