Kể từ khi Subscription
là một bảng thông qua cho mối quan hệ m2m giữa Post
và Subscriber
, khi bạn đặt hàng trên một trường Subscription
mô hình chính nó, tất cả các bài đăng xuất hiện dưới dạng các hàng riêng lẻ trong tập kết quả và đó là lý do tại sao bạn nhận được s_count=1
bởi vì mỗi bài đăng với một người đăng ký cụ thể là duy nhất.
Bạn cần chú thích Post
các đối tượng có date_subscribed
mới nhất của tất cả subscribers
và sau đó đặt hàng trên trường được chú thích:
posts = Post.objects.annotate(
s_count=Count('subscribers'),
s_date_max=Max('subscription__date_subscribed')
).order_by('-s_count', '-s_date_max')
CẬP NHẬT cho câu hỏi tiếp theo:
Nếu bạn sử dụng count()
nó sẽ trả về số lượng Posts
. Bạn có thể thấy rằng nó sẽ khác với số lượng bạn nhận được từ len(queryset.values_list('s_count', 'subscription__date_subscribed'))
bởi vì tại thời điểm này, các giá trị riêng lẻ cho ngày đã được tìm nạp trong tập kết quả.