簡體   English   中英

Django在annotate中獲取相關對象的QuerySet

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM