python - 按帖子评论排名排序的用户列表
问题描述
我想做一个API End Point
,这样用户就可以得到他所在城市的用户列表,按他们的帖子评论排序
我在帖子模型中定义了一个方法来计算总评论(赞成票和反对票),我想象可以通过以下路径实现解决方案,但我groupBy post_owner
在帖子中并不完全确定orderBy sum(count_reactions())
,但我不知道如何在 django 中做到这一点
后模型
class Post(models.Model):
title = models.TextField(max_length=255, default='Title')
post_owner = models.ForeignKey(MyUser, on_delete=models.CASCADE)
description = models.TextField(max_length=255)
city = models.ForeignKey(City, related_name='location', on_delete=models.CASCADE)
longitude = models.CharField(max_length=255)
image = models.CharField(max_length=255,
default='https://www.eltis.org/sites/default/files/styles/web_quality/public/default_images/photo_default_2.png')
latitude = models.CharField(max_length=255)
created_at = models.DateTimeField(auto_now_add=True)
def count_reactions(self):
likes_count = Reaction.objects.filter(post=self.id, is_like=True).count()
dislikes_count = Reaction.objects.filter(post=self.id, is_like=False).count()
return likes_count - dislikes_count
def owner(self):
return self.post_owner
我的用户模型
class MyUser(AbstractUser):
phone_number = models.BigIntegerField(blank=False, unique=True)
city = models.ForeignKey(City, related_name='city', on_delete=models.CASCADE)
address = models.CharField(max_length=255)
def owner(self):
return self
反应模型
class Reaction(models.Model):
reaction_owner = models.ForeignKey(MyUser, on_delete=models.CASCADE)
post = models.ForeignKey(Post, related_name='reactions', on_delete=models.CASCADE)
is_like = models.BooleanField(null=False)
def owner(self):
return self.reaction_owner
预期的结果是通过他们的帖子评论得到用户的有序列表,但只有同一城市的用户(MyUser
模型中的城市字段)
解决方案
您可以将所有内容放入一个查询中。
根据您Reaction
命名查询的位置,查询应如下所示:
# Filter for the city you want
users = MyUser.objects.filter(city=your_city_obj)
# Then doing the calculations
users = users.annotate(rank_point=(Count('post__reactions', filter=Q(post__reactions__is_like=True)) - (Count('post__reactions', filter=Q(post__reactions__is_like=False)))))
# And finaly, order the results
users = users.order_by('-rank_point')
推荐阅读
- matlab - 任何有经验的 matlab 编码员可以建议提高我的代码效率的方法吗?
- django - 创建表单向导/表单集以回答表格中的问题并将其保存到另一个(调查)
- gradle - 无法通过 jmRun 将参数从 build.gradle 文件传递给 .jmx 文件
- javascript - WebSocket 的 fetch 的“credentials:'include'”或 XMLHttpRequest 的“withCredentials”是否有等价物?
- java - 如何使用每个可能的真假组合生成布尔数组
- c# - 从两个表中打印数据并获取与一个客户相关的所有项目
- node.js - 你如何使用 express 服务 css 文件?
- javascript - 如何在编译时从缓存参数中延迟“新功能”,等到它被使用
- sql - SQL中的增量下个月日期
- java - 如何操作http GET请求整数参数?