按创建帖子的用户对帖子进行分组

Grouping posts by the user who created them

我正在尝试在我的网站(社交媒体类型)上创建一个页面,其中的帖子将由创建它们的用户进行分组和显示。

我尝试创建一个 following 上下文项,然后通过该组中的每个用户访问帖子,但没有显示任何结果。

我还尝试过滤 following 中用户的帖子。但是,它没有显示任何结果。不知道自己是否正确使用了过滤功能

这是我的观点:

class CommunityListView(LoginRequiredMixin, ListView):
    model = Post
    template_name = 'community/community.html'
    context_object_name = 'posts'
    ordering = ['-date_added']

    def get_context_data(self, **kwargs):
        context = super(CommunityListView, self).get_context_data(**kwargs)
        active_user = self.request.user
        active_user_following = active_user.following.values_list('user_id', flat=True)
        following_user_objects = []
        context['following'] = following_user_objects
        context['followed_user_pots'] = Post.objects.filter(user__in=following_user_objects)
        for id in active_user_following:
            followed = User.objects.get(id=id)
            following_user_objects.append(followed)
        return context

这是我的 HTML 代码:

{% for user in following %}
  {{user}}
  {% for post in user.post %}
    {{post}}
  {% endfor %}
{% endfor%}

以上HTML显示的都是following中用户的用户名。我需要通过其他方式访问这些帖子吗?

这是Post型号:

class Post(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    topic = models.ForeignKey(Topic, on_delete=models.CASCADE, null=True)
    post =  models.CharField(max_length=200)
    date_added = models.DateTimeField(default=timezone.now)

首先我认为在 values_list 中你必须输入 id 而不是 user_id,因为你想获得以下用户的 id。当您在 get_queryset 方法中获得查询逻辑时,这也是更好的做法。所以你不需要在上下文中添加 followed_user_pots 最好删除它,而是使用这段代码来获得你想要的东西。

def get_queryset(self):
    qs = super().get_queryset()
    active_user = self.request.user   
    active_user_following = active_user.following.values_list('id', flat=True)
    return Post.objects.filter(user__id__in=following_user_objects)

在模板中,您可以通过遍历 object_list

来访问帖子
{% for post in object_list %}

    {{post}}

{% endfor %}