Django - Как выполнить итерацию по объекту, который имеет поле ManyToManyField с User в качестве реляционного аргумента и получить конкретного пользователя?
У меня есть веб-приложение художественной галереи, которое отображает сетку изображений. На каждом изображении указано количество пользователей, которым это изображение "понравилось". Я уже реализовал динамические лайки/нелайки с помощью счетчика int, который увеличивает/уменьшает счетчик в реальном времени через AJAX.
Что я пытаюсь сделать сейчас, но не могу понять, это:
1.) При загрузке страницы, если вошедшему в систему пользователю не понравилось определенное изображение, отображать кнопку "Мне нравится" определенного изображения определенным цветом, например, черным. Но если пользователю, вошедшему в систему, оно понравилось, отобразите кнопку "Мне нравится" другим цветом, скажем, синим, чтобы указать, какие изображения понравились этому пользователю, а какие нет. Так же, как в Facebook или Instagram.
Вот моя модель портрета (некоторые поля опущены):
class Portrait(models.model):
likes = models.ManyToManyField(User,related_name='like',default=None,blank=True)
like_count = models.BigIntegerField(default=0)
Вот мой views.py для модели Portrait:
def index(request):
paintingObjects = Portrait.objects.all()
context = {
'paintingObjects': paintingObjects,
}
return render(request, "index.html", context)
Вот часть моего шаблона index.html, в которой я хочу выполнить проверку (псевдокод):
{% for paintingData in paintingObjects %}
{% if request.user.is_authenticated %}
{% if this current request.user is in this paintingData's 'likes' field %}
<a role="button" class="like-click" id="{{paintingData.id}}">
<span style="float: left;" class="p-1 mt-1">
<i class="fa fa-thumbs-up" style="font-size:22px;color:blue"></i>
</span>
</a>
{% else if the user hasn't liked this particular paintingData yet %}
<a role="button" class="like-click" id="{{paintingData.id}}">
<span style="float: left;" class="p-1 mt-1">
<i class="fa fa-thumbs-up" style="font-size:22px;color:black"></i>
</span>
</a>
{% endif %}
{% endfor %}
В моем поле "likes" модели Portrait, как мне получить доступ к User(s) каждого изображения и проверить, есть ли в списке текущий вошедший пользователь?
Вы можете получить доступ ко всем лайкам пользователя, сделав это :
request.user.like.all
Потому что User является связанным объектом для атрибута like, а related_name называется "like".
Обратите внимание, что вы должны были сделать наоборот, ваш атрибут должен быть сингулярным "like", а связанное_имя плюральным "likes", потому что вы обращаетесь к набору like для конкретного пользователя