1 人がメッセージを投稿し、他の数人がそれに返信するフォーラムを構築しています。
次のようなメッセージ モデルと応答モデルがあります。
class Messages (models.Model):
author = models.ForeignKey(User)
message = models.TextField()
def __unicode__(self):
return self.message
class Responses (models.Model):
message = models.ForeignKey(Messages)
responder = models.ForeignKey(User, related_name='responder')
rsp_to = models.ForeignKey(User, related_name='rsp_to')
rsp_from = models.ForeignKey(User, related_name='rsp_from')
response = models.TextField()
pub_date = models.DateTimeField('date_published')
def __unicode__(self):
return self.message
最新のレスポンダーからのすべての応答が最初になり、2 番目に新しいレスポンダーからの応答が 2 番目になるように、レスポンダーに従って編成されたクエリセットを取得したいと考えています。
db テーブルの例:
pk message responder rsp_to rsp_from response pub_date
------------------------------------------------------------
1 a User.2 a.author User.2 .... 1
2 a User.3 a.author User.3 .... 2
3 a User.3 User.3 a.author .... 3
4 a User.4 a.author User.4 .... 4
5 a User.4 User.4 a.author .... 5
6 a User.2 User.2 a.author .... 6
7 a User.3 a.author User.3 .... 7
8 a User.3 User.3 a.author .... 8
9 a User.4 a.author User.4 .... 9
並べ替えられたクエリセット:
pk message responder rsp_to rsp_from response pub_date
------------------------------------------------------------
9 a User.4 a.author User.4 .... 9
5 a User.4 User.4 a.author .... 5
4 a User.4 a.author User.4 .... 4
8 a User.3 User.3 a.author .... 8
7 a User.3 a.author User.3 .... 7
3 a User.3 User.3 a.author .... 3
2 a User.3 a.author User.3 .... 2
6 a User.2 User.2 a.author .... 6
1 a User.2 a.author User.2 .... 1
または、次のように表現します。
r = [<all responses from latest responder>, <all responses from 2nd latest responder>,..., <all responses from earliest responder>]
私が始めるなら:
r = Responses.objects.filter(message="a").order_by('-pub_date')
最初に最新の応答を取得します。その最新の一意のレスポンダからのすべての応答がクエリセットで最初にグループ化され、2 番目の一意のレスポンダからのすべての応答が 2 番目にグループ化されるように、クエリセットを並べ替えるにはどうすればよいですか?