[英]Django get related object's QuerySet inside annotate
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
#Unnecessary
class Comment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user_comments")
post = models.ForeignKey(Post, on_delete=models.CASCADE,related_name="post_comments")
liked_users = models.ManyToManyField(User, blank=True, related_name="liked_comments")
disliked_users = models.ManyToManyField(User, blank=True related_name="disliked_comments")
#Unnecessary
通常,我使用此代碼使我的評論對象具有屬性“ voting
”並按該屬性對它們進行排序。
comments = models.Comment.objects.filter(post=post).annotate(voting=Count("liked_users")-Count("disliked_users")).order_by("-voting")
但是當我想查詢帖子時,我無法達到他們的評論:
我希望我的 QuerySet“ posts
”為每個帖子都有一個屬性,稱為“ best_3_comments
”。 這是一個 QuerySet 他們的評論按他們的voting
排序。
我可以在每次查詢帖子時不查詢所有評論的情況下實現這一點嗎?
posts = models.Post.objects.annotate(
best_3_comments = get_query_of_the_posts_comments("post_comments").annotate(
voting=Count("liked_users")-Count("disliked_users")
).order_by("-voting")[:3]
)
我可以使用什么功能來查詢帖子的評論,我應該如何處理? 我對實現我想要實現的目標的新想法完全持開放態度,我找不到哪個功能以及如何使用它。
先感謝您。
我找到了解決方案。 我想與那些在未來尋找解決與我類似的問題的方法的人分享它。
posts = models.Post.objects.all() # The QuerySet You Want To Use
for post in posts:
post.best_3_comments = models.Comment.objects.filter(post=post).annotate(voting=Count("liked_users")-Count("disliked_users")).order_by("-voting")[:3]
解決方案是遍歷我們的 QuerySet,為它們分配一個包含 QuerySet 的屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.