从消息列表中检查用户是否喜欢消息
check user have liked msg or not from list of messages
假设
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}]
您可以注释多对多字段的 Exists()
subquery using the through model:
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))
假设
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}]
您可以注释多对多字段的 Exists()
subquery using the through model:
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))