class Post(Model):
word = TextField()
subscribers = ManyToManyField(User, related_name='subscribed', through='Subscription')
class Subscription(Model):
post = ForeignKey(Post)
subscriber = ForeignKey(User)
date_subscribed = DateTimeField(default=timezone.now)
class Meta:
ordering = ('-date_subscribed',)
unique_together = (('post', 'subscriber'))
私がやりたいことは、すべての記事を選択する加入者の数によってそれらを注文することで、加入者数は、ORDER BY等しい場合最後date_subscribed
。
私の入力データ:予想通り
post1 = Post(text="post1")
post2 = Post(text="post2")
post3 = Post(text="post3")
post4 = Post(text="post4")
user1 = User(username="user1")
user2 = User(username="user2")
user3 = User(username="user3")
user4 = User(username="user4")
Subscription.objects.create(post=post1, user=user1)
Subscription.objects.create(post=post2, user=user1)
Subscription.objects.create(post=post3, user=user1)
Subscription.objects.create(post=post3, user=user2)
Subscription.objects.create(post=post3, user=user3)
Subscription.objects.create(post=post3, user=user4)
Subscription.objects.create(post=post4, user=user1)
Subscription.objects.create(post=post4, user=user2)
Subscription.objects.create(post=post4, user=user3)
このクエリは動作しますが、それはdate_subscribed
で注文していません:
Post.objects.annotate(s_count=Count('subscribers')).order_by('-s_count')
私が書くとき:
Post.objects.annotate(s_count=Count('subscribers')).order_by('-s_count', '-subscription__date_subscribed')
私は奇妙です結果と私は本当にこの動作を理解していない。上記のデータの場合は、s_count=1
ですべての投稿を正確に出力します。
なぜs_count
が1ですか?また、最後に正しく注文する方法もdate_subscribed
?
UPD: もう1つ質問があります。なぜPost.objects.annotate(s_count=Count('subscribers')).order_by('-s_count', '-subscription__date_subscribed').count()
はサブスクリプションの行数の代わりに4を与えますか? Subscription
以来
かなり簡単です。ありがとうございました。 –
助けになるのはうれしいです。 – AKS
もう1つ質問があります。なぜ、Post.objects.annotate(s_count = Count( 'subscribers')))。order_by( ' - s_count'、 '-subscription__date_subscribed')。 –