【问题标题】:How to show users own post along with post from users he follows in Django如何显示用户自己的帖子以及他在 Django 中关注的用户的帖子
【发布时间】:2020-08-31 04:27:29
【问题描述】:

作为学习 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)

提前致谢!

【问题讨论】:

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


    【解决方案1】:

    如果我理解正确,您正在尝试获取用户的所有帖子以及用户关注的用户的帖子。如果是这种情况,我认为您无法通过链接过滤器来做到这一点,因为您需要一个“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?

    【讨论】:

    猜你喜欢
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 2019-05-23
    • 1970-01-01
    • 2017-04-02
    • 2017-04-05
    相关资源
    最近更新 更多