首页 > 解决方案 > 返回用户关注的人的帖子

问题描述

我有一个用户关注系统,我希望能够获得用户关注的人的所有帖子/展示。我已经能够在一定程度上实现这一点。
问题是它不是获取所有用户关注的帖子,而是只返回一个用户的帖子,而不是返回一个人关注的所有用户的帖子。

给定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
    }
]

请问,有谁知道为什么它不返回他关注的所有人的展示柜?

标签: pythondjangodjango-rest-framework

解决方案


我认为你可以达到你的目的,如果你改变这样的观点:

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')

推荐阅读