Проверить, понравилось ли пользователю сообщение или нет, из списка сообщений
предположить
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}]
Как насчет:
likes = Msg.objects.filter(channelname='home').values('likes__id', 'likes__liked')
Вы можете аннотировать Exists()
подзапрос, используя сквозную модель вашего поля "многие ко многим":
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))
for msg in queryset:
print(msg.pk, msg.liked)