Как повлиять на один зацикленный элемент в Django html?
Я создаю приложение на Django, используя Bulma для стилизации. У меня есть модель Polishes, в которой есть поле favorites, которое ссылается на User (пользователи могут сохранять полировки в список избранного):
models.py:
class Polish(models.Model):
name = models.CharField(max_length=100)
image = models.CharField(max_length=400, default="https://www.dictionary.com/e/wp-content/uploads/2018/02/nail-polish-light-skin-tone.png")
brand = models.ForeignKey(Brand, on_delete=models.CASCADE, related_name='polishes')
favorites = models.ManyToManyField(User, related_name='favorite', default=None, blank=True)
def __str__(self):
return self.name
Функция add_favorites проверяет, был ли лак уже добавлен в избранное пользователя, и если да, то удаляет его из списка. Если нет, то она добавляет его:
views.py:
@ login_required
def add_favorite(request, id):
polish = get_object_or_404(Polish, id=id)
if polish.favorites.filter(id=request.user.id).exists():
polish.favorites.remove(request.user.pk)
else:
polish.favorites.add(request.user.pk)
return redirect('favorites_list')
При выводе списка лаков я использую карточки Bulma, отображая по одному лаку на карточке. В нижнем колонтитуле карточки я хочу, чтобы было написано "Сохранить в избранном", если лак не находится в списке избранного пользователя, и "Удалить из избранного", если находится. Я изо всех сил пытаюсь заставить этот элемент работать. В настоящее время на всех карточках отображается либо "Сохранить в избранном", либо "Удалить из избранного".
Есть ли у кого-нибудь идеи, как вывести другое сообщение только для тех, кто уже находится в списке избранных?
polish_list.html:
...
<div class="gallery">
{% for polish in polishes %}
<a href="{% url 'polish_reviews' polish.pk %}">
<div class="card">
<div class="card-header">
<p class="card-header-title">{{polish.name}} by {{polish.brand}}</p>
</div>
<div class="card-image">
<figure class="image is-square">
<img src="{{polish.image}}" alt="{{polish.name}}" />
</figure>
</div>
<footer class="card-footer">
{% if polish.favorites %}
<a href="{% url 'add_favorite' polish.id%}" class="card-footer-item">Remove from Favorites</a>
{% elif user.is_authenticated %}
<a href="{% url 'add_favorite' polish.id%}" class="card-footer-item">Save to Favorites</a>
{% else %}
<a href="{% url 'login' %}" class="card-footer-item">Save to Favorites</a>
{%endif%}
</footer>
</div>
</a>
{% empty %}
<article class="message">
<div class="message-header">
<p>No Polishes Available</p>
</div>
</article>
{% endfor %}
</div>
...
Я пробовал использовать условие в моем polish_list.html - {% if polish.favorites %} - но это изменит все карты, а не только те, которые сохранены в избранном.