【问题标题】:Retrieve all Chats that have a certain participating user检索具有特定参与用户的所有聊天
【发布时间】:2018-11-17 15:29:32
【问题描述】:

我有一个Chat 模型,其中有一个名为users 的字段。我如何检索所有Chats,其users 字段有一个CustomUser 和某个usernameChats 和CustomUsers 之间存在ManyToMany 关系。

我尝试了以下方法,但它不起作用:

user = CustomUser.objects.get(username=username)
chats = Chat.objects.filter(users__in=user) # doesn't work
chats = Chat.objects.filter(users__contains=user) # also doesn't work

【问题讨论】:

    标签: django python-3.x django-views


    【解决方案1】:

    这应该可以完成工作。

    chats: QuerySet = Chat.objects.filter(users__in=[user.pk])
    

    如果您要搜索多个用户:

    users: QuerySet = CustomUser.objects.filter(...)
    user_ids: List = list(users.values_list('pk', flat=True))
    chats: QuerySet = Chat.objects.filter(users__in=user_ids)
    

    【讨论】:

      【解决方案2】:

      您应该组合查询集,除非您出于其他原因需要访问user。这会将所需的 sql 查询数减少到 1。

      Chat.objects.filter(users__username=username)
      

      【讨论】:

        猜你喜欢
        • 2016-12-05
        • 2016-09-29
        • 1970-01-01
        • 2015-03-04
        • 1970-01-01
        • 1970-01-01
        • 2015-02-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多