Проверить, понравилось ли пользователю сообщение или нет, из списка сообщений

предположить

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)
Вернуться на верх