如何显示用户自己的帖子以及他在Django中关注的用户的帖子

时间:2020-05-14 15:03:41

标签: django django-models django-rest-framework

作为学习django的一部分,我正在创建一个博客网站,并且也是一个用户关注模型。在首页的此处,我只能看到我关注的人的帖子,而用户看不到自己的帖子。我尝试使用链式过滤器/多重过滤器,但在这种情况下似乎不起作用。请查看此查看代码,并让我知道我应该在此处进行哪些更改。

    @login_required
def myhome(request, tag_slug=None):
    current_user = request.user
    following_ids = request.user.following.values_list('id',flat=True) 
    actions = Action.objects.filter(user_id__in=following_ids) #Action notification
    posts_list = Post.objects.filter(user_id__in=following_ids).filter(user=current_user).\
                                order_by('-post_date') #See only followed people post
    tag = None
    if tag_slug:
        tag = get_object_or_404(Tag, slug=tag_slug)
        posts_list = posts_list.filter(tags__in=[tag])

    paginator = Paginator(posts_list, 5)
    page = request.GET.get('page')
    try:
        posts = paginator.page(page)
    except PageNotAnInteger:
        posts = paginator.page(1)
    except EmptyPage:
        posts = paginator.page(paginator.num_pages)
    if following_ids:
        actions = actions.filter(user_id__in=following_ids)
        actions = actions.select_related('user', 'user__profile').prefetch_related('target')[:10]

    context = {
            'page':page,
            'posts':posts,
            'tag':tag,
            'actions':actions,
    }
    return render(request, 'posts/users/myhome.html', context)

谢谢!

1 个答案:

答案 0 :(得分:2)

如果我对您的理解正确,那么您正在尝试获取该用户的所有帖子以及该用户关注的用户的帖子。如果是这种情况,我认为您无法通过链接过滤器来做到这一点,因为您需要“ OR”条件。

因此,您可以通过多种方式实现这一目标,一种简单的方法是像这样使用|运算符,

posts_list = Post.objects.filter(user_id__in=following_ids) | Post.objects.filter(user=current_user)

但是我认为针对这种情况和其他复杂情况的Django构建是Q objects。这样的事情应该起作用,

from django.db.models import Q

posts_list = Post.objects.filter(Q(user_id__in=following_ids) | Q(user=current_user))

您在这里对此主题进行了很好的讨论(如何在Django查询中执行OR过滤器?)[How do I do an OR filter in a Django query?