从消息列表中检查用户是不是喜欢 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的主要内容,如果未能解决你的问题,请参考以下文章

如何检查用户是不是从用户列表中关注另一个用户?

如何检查用户是不是有喜欢的属性

如何检查用户是不是已经喜欢 Facebook 页面?

检查用户是不是喜欢页面的无缝方式

Facebook如何检查用户是不是喜欢页面并显示内容?

PHP Facebook SDK - 检查用户是不是喜欢粉丝专页