Возвращать True, если сообщение имеет лайк от создателя сообщения

возвращать True, если пост имеет лайк от создателя поста как сделать такой аналог на django

user = {
    'id': 121
}

likes = [{
    'userInfo': {
        'id': 121
    }
}]

hasSelfLike = any(like['userInfo']['id'] == user['id'] for like in likes)

print(hasSelfLike)

models.py

class Task(models.Model):
    user_info = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, name='userInfo')
    title = models.CharField(max_length=100)
    text = models.TextField(max_length=10000)

    def get_hasSelfLike(self):
        return self.likes.values_list('userInfo_id', 'userInfo__id') #returns always True


class Like(models.Model):
    task_id = models.ForeignKey(Task, on_delete=models.CASCADE, blank=True, null=True, related_name='likes', name='taskId')
    user_info = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, name='userInfo')

Вы можете отфильтровать Task, чтобы вернуть Task с пользователем как через F объект [Django-doc] для ссылки на поле, так:

from django.db.models import F

Task.objects.filter(
    likes__user_info=F('user_info')
)

или для Task, вы можете проверить Task с помощью:

def has_self_like(self):
    return self.user_info_id in self.likes.values_list('user_info_id', flat=True)

или через exists():

def has_self_like(self):
    return self.likes.filter(user_info_id=self.user_info_id).exists()

Примечание: Обычно не добавляют суффикс _id к полю ForeignKey, так как Django автоматически добавит поле-"близнец" с суффиксом _id. Поэтому он должен быть task_id, вместо task.

.
Вернуться на верх