【问题标题】:check user have liked msg or not from list of messages从消息列表中检查用户是否喜欢 msg
【发布时间】:2026-01-16 14:25:02
【问题描述】:

假设

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}]

【问题讨论】:

    标签: django database django-models django-views backend


    【解决方案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,但请检查编辑...
    • 我做错了。但现在它奏效了。非常感谢。