python - 返回用户关注的人的帖子
问题描述
我有一个用户关注系统,我希望能够获得用户关注的人的所有帖子/展示。我已经能够在一定程度上实现这一点。
问题是它不是获取所有用户关注的帖子,而是只返回一个用户的帖子,而不是返回一个人关注的所有用户的帖子。
给定models.py——用户的模型、关注和展示(用户的帖子)
class User(AbstractBaseUser, PermissionsMixin):
username = None
email = models.EmailField(max_length=254, unique=True)
fullname = models.CharField(max_length=250)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
last_login = models.DateTimeField(null=True, blank=True)
date_joined = models.DateTimeField(auto_now_add=True)
slug = models.SlugField(max_length=255, unique=True, blank=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['fullname']
class FollowLog(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='followers')
followed_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE,
related_name='following', null=True)
followed_on = models.DateTimeField(auto_now_add=True)
status = models.CharField(choices=FOLLOW_STATUS, default=FollowStatus.following.value, max_length=30)
updated_on = models.DateTimeField(auto_now=True)
unfollowed_on = models.DateTimeField(null=True)
blocked_on = models.DateTimeField(null=True)
class Showcase(models.Model):
title = models.CharField(max_length=50)
description = models.TextField(null=True)
skill_type = models.ForeignKey(Skill, on_delete=models.CASCADE)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.DO_NOTHING, related_name="Showcases")
content = models.TextField(null=True)
created_on = models.DateTimeField(auto_now_add=True)
updated_on = models.DateTimeField(auto_now=True)
voters = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name="upvotes")
slug = models.SlugField(max_length=255, unique=True)
views.py获取已登录用户的所有帖子
class FollowerShowcasesView(generics.ListAPIView):
serializer_class = ShowcaseSerializer
permission_classes = [IsAuthenticated]
def get_queryset(self):
current_user = self.request.user
followed_people = FollowLog.objects.filter(user=current_user).filter(status='following').values('followed_by')
return Showcase.objects.filter(user__in=followed_people).order_by('-created_on')
序列化程序.py
class ShowcaseDetaiedSerializer(serializers.ModelSerializer):
user = serializers.SlugRelatedField(read_only=True, slug_field='slug')
*some other things*
class Meta:
model = Showcase
exclude = ['updated_on', 'id']
问题是当前登录的用户正在关注 2 个用户
[
{
"user": "opeyemi-david-odedeyi-7ug3j0"
},
{
"user": "opeyemi-odedeyi-spniw5"
}
]
当我尝试获取登录用户关注的人的帖子时,我只为第一个用户获取"opeyemi-david-odedeyi-7ug3j0"
[
{
"user": "opeyemi-david-odedeyi-7ug3j0",
"created_on": "1 day ago",
"likes_count": 0,
"user_has_voted": false,
"slug": "love-over-everything-27l1ol",
"comment_count": 0,
"title": "Love over everything",
"description": "dsunfdlujnfiundlijndijnfdkjndfkjndfkjnfdjndfjunfdju",
"content": "jsdkjnsdkjndkhjnsdndskdsndsnsdjnkdsndskjndsjdsd",
"skill_type": 2
},
{
"user": "opeyemi-david-odedeyi-7ug3j0",
"created_on": "1 month ago",
"likes_count": 1,
"user_has_voted": true,
"slug": "lorem-ipsum-4ib02y",
"comment_count": 1,
"title": "lorem ipsum",
"description": "lorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsum",
"content": "lorem ipsumlorem ipsumlorem ipsumlorem ipsum",
"skill_type": 1
}
]
问题是第二个用户也有帖子/展示
[
{
"user": "opeyemi-odedeyi-spniw5",
"created_on": "8 hours ago",
"likes_count": 0,
"user_has_voted": false,
"slug": "consistency-s1v63n",
"comment_count": 0,
"title": "Consistency",
"description": "consistence is the key to success",
"content": "h,jhbjhbjhbjhbjh",
"skill_type": 1
}
]
请问,有谁知道为什么它不返回他关注的所有人的展示柜?
解决方案
我认为你可以达到你的目的,如果你改变这样的观点:
followed_people = FollowLog.objects.filter(followed_by=current_user).filter(status='following').values('followed_by')
return Showcase.objects.filter(user__in=followed_people).order_by('-created_on')
推荐阅读
- google-bigquery - 如何在bigquery中按天计算(非)连续记录?
- typoscript - 从随机排序的特定类别的 tx_news 表中选择代码
- database - 使用 postgresql 中已存在的表创建 ER 图或任何 DB 图
- amazon-web-services - 如何使用 lambda Java SDK 从 SQS 读取所有消息,聚合所有这些消息并将它们作为单个 JSON 文件存储到 S3 存储桶?
- maven - Maven 执行目标编译失败
- r - R中传说中的斜体和非斜体字?
- pandas - 如何更改熊猫值的数据类型
- git - 从 Git 代码搜索中排除文件夹/创建存档分支
- c# - 是否有“get:”属性目标?
- android - 如何将意图定义为 URL