【问题标题】:How can i add a user to a query set of users如何将用户添加到用户查询集中
【发布时间】:2018-08-28 10:11:08
【问题描述】:

我得到了所有关注的用户,除了登录的用户之外,所有用户都在其中。

def FeedListView(request):
    my_users=request.user.following.all()
    my_users.append(request.user)
    print(my_users)
    query=FeedDetail.objects.filter(user__in=my_users)
    return render(request,'feed/feed_list.html',{'objects':query})

我无法附加查询列表,但对于查询,我还希望它过滤 my_users 中不存在的请求用户 谢谢

【问题讨论】:

    标签: django


    【解决方案1】:

    尝试附加 用户 ID 而不是他们的对象/查询集。

    def FeedListView(request):
        my_users_id = list(request.user.following.all().values_list('id', flat=True))
        my_users_id.append(request.user.id)
        query = FeedDetail.objects.filter(user__id__in=my_users_id)
        return render(request, 'feed/feed_list.html', {'objects': query})

    参考
    1. 发帖 - How to add an model instance to a django queryset?
    2.values_list() -- [Django Doc]

    【讨论】:

      【解决方案2】:

      Phillip Watts 的答案是正确的,但它使用了 2 个查询。 如果您关心效率,可以使用Q operator

      from django.db.models import Q
      FeedDetail.objects.filter(
          Q(user=request.user) 
          | Q(user__in=request.user.following.all())
      )
      

      【讨论】:

        【解决方案3】:

        你需要先把查询集变成一个列表,像这样:

        def FeedListView(request):
            my_users_list = list(request.user.following.all())
            my_users_list.append(request.user)
            print(my_users_list)
            query=FeedDetail.objects.filter(user__in=my_users_list)
            return render(request,'feed/feed_list.html',{'objects':query})
        

        【讨论】:

        • ^ 这将创建一个 ID 列表。您还可以使用 my_users_list = list(my_users) -> my_users_list.append(request.user) -> query=FeedDetail.objects.filter(user__in=my_users_list) 创建对象列表
        • 通过 list(my_users) 转换它,它按预期工作。非常感谢
        • 如果这有效,您可以标记为正确答案吗?
        • QuerySet.values_list() 不会返回list,而是返回另一个QuerySet,并且无论如何您都会丢弃结果,因此您的代码与OP发布的代码完全相同(无效),只添加了一个完全无用的操作。
        猜你喜欢
        • 2019-09-21
        • 2022-01-18
        • 2022-01-23
        • 2017-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-28
        • 1970-01-01
        相关资源
        最近更新 更多