2016-04-09 5 views
0

を注文して、IDに加えて、Nインスタンスによるインスタンスを取得します(メッセージは、そのタイムスタンプによって順序付けされています)。私は会話をレンダリングするときにn個のメッセージを読み込みます。古いメッセージは、必要に応じてajaxリクエストを介してロードする必要があります。Djangoのクエリセットは:私は<strong>会話</strong>と<strong>メッセージ</strong>クラスを持っている

私の最初のビューのクエリセットは次のとおりです。私のAJAXビューで

messages = conversation.message_set.all()[:settings.INITIAL_MSG_LOAD] 

、私が最も古い表示されるメッセージ(oldest_id)のPKを持っています。

私は、これらの要求の両方に対してデータベースに送信されたSQLクエリを実際に認識していません。

データベースは2番目の要求ですべてのメッセージを返しますか?そして、与えられたpkによってn個のメッセージの次の集合を得るより効率的な方法がありますか?

答えて

2

あなたは、はるかに効率的になる1つのクエリでそれを行うことができます:conversation.message_set.filter(id__gt=oldest_id)[:settings.INITIAL_MSG_LOAD]

説明:timestamp

によって messagesのためのデフォルトの順序で settings.INITIAL_MSG_LOADによって idおろし金での行の後、 oldest_id制限数を conversationmessagesをフィルタリング
+0

ソリューションには順次IDが必要です。しかし、idの代わりにタイムスタンプでフィルタリングすると、同じクエリーセットになるはずです。 –

関連する問題