python - Django 查询多对多
问题描述
我想做一个查询来选择在他们的帖子中有更多喜欢的前 5 个用户。
我的模型是:
class Post(ModelBase):
title = models.CharField('Title', max_length=255)
description = models.TextField()
finished = models.BooleanField(default=False)
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='post_author')
likes = models.ManyToManyField(User, through='PostLike',)
tags = models.ManyToManyField(Tag, related_name='tags')
def total_likes(self):
return self.likes.count()
class PostLike(ModelBase):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
我有这个,但它不适合我。不要告诉用户帖子的点赞数,而是计算每个用户给出的点赞数。
users = User.objects.annotate(likes_count=Count('postlike', Q(post__is_active=True)))\
.order_by('likes_count').reverse()[0:5]
解决方案
而不是注释您需要注释(通过您设置的相关名称遍历关系)的Count
计数:postlike
post_author__likes
users = User.objects.annotate(
likes_count=Count(
'post_author__likes',
filter=Q(post_author__is_active=True)
)
).order_by('-likes_count')[0:5]
推荐阅读
- java - 将一个兄弟的值更改为另一个 Java 和 XPath 的值
- mysql - 在一行上多次显示同一列
- sql - 如何从以下 sql 查询中选择多个表的组合数据
- firebase - 颤振错误:输入'StreamBuilder
' 不是类型 'String' 的子类型 - visual-studio-code - 如何在 Visual Studio Code 中隐藏保存、撤消等选项
- python - 在 Loki 中向文件管理器日志条目添加标签
- matlab - 如何确保我的优化算法找到了解决方案?
- reactjs - 使用 Gatsby.js 在重定向中捕获参数
- python - pyinstaller 不能包含包
- c# - Kendo ASP.NET MVC Grid Pageable() 属性组合