从消息列表中检查用户是不是喜欢 msg
Posted
技术标签:
【中文标题】从消息列表中检查用户是不是喜欢 msg【英文标题】:check user have liked msg or not from list of messages从消息列表中检查用户是否喜欢 msg 【发布时间】:2021-11-13 12:55:14 【问题描述】:假设
class Msg(models.Model):
...
likes = models.ManyToManyField(User,...)
channelname = models.CharField(...)
现在我的查询集是
queryset = Msg.objects.filter(channelname='home')
在这之后我应该怎么做才能得到类似的东西
[id:xyz,liked=true,id:tuv,liked=true,id:abc,liked:false]
【问题讨论】:
【参考方案1】:您可以使用多对多字段的 through model 注释 Exists()
subquery:
from django.db.models import Exists, OuterRef
liked_subquery = Msg.likes.through.objects.filter(
msg=OuterRef('pk'), # Filter for outer queries Msg instance
user=some_user_instance # Filter for user whose like we are checking for
)
queryset = Msg.objects.filter(
channelname='home'
).annotate(
liked=Exists(liked_subquery)
).values('id', 'liked')
print(list(queryset))
【讨论】:
这不起作用 @RoyalBosS 你是什么意思?你收到错误了吗?请查看编辑是否在最后循环打印您想要的内容? 再读一遍问题 @RoyalBosS 你说它不起作用只是因为输出不是字典(老实说这很容易自己做)?我虽然问题的重点是查找用户是否喜欢Msg
,但请检查编辑...
我做错了。但现在它奏效了。非常感谢。以上是关于从消息列表中检查用户是不是喜欢 msg的主要内容,如果未能解决你的问题,请参考以下文章