【问题标题】:Retrieve all Chats that have a certain participating user检索具有特定参与用户的所有聊天
【发布时间】:2018-11-17 15:29:32
【问题描述】:
我有一个Chat 模型,其中有一个名为users 的字段。我如何检索所有Chats,其users 字段有一个CustomUser 和某个username? Chats 和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)