Вызов функции в DetailView, views.py. которая возвращает bool. Django, python
Я создаю сайт электронной коммерции на django. Есть главная страница, на которой перечислены все товары на сайте, и когда пользователь нажимает на любой из этих товаров, он попадает на страницу подробностей, которая показывает подробности об этом товаре. Также на этой странице я добавил кнопку "wishlist", чтобы пользователи могли добавить этот товар в свой список желаний. Моя проблема заключается в том, что если у пользователя нет этого товара в списке желаний, я хочу отобразить кнопку "Добавить в список желаний", чтобы добавить этот товар в список желаний при нажатии на нее, в противном случае я хочу отобразить кнопку "Удалить из списка желаний", чтобы удалить товар из списка желаний при нажатии на нее. У меня есть две отдельные функции для добавления и удаления элементов, и они прекрасно работают, но я хочу отображать только одну из кнопок "добавить" или "удалить", проверяя, существует ли этот элемент в их списке желаний или нет. Моя логика заключалась в том, чтобы написать функцию, проверяющую, есть ли у пользователя этот элемент в его списке желаний или нет, в DetailView, который отображает "детальную" страницу в views.py, и отобразить только одну из них, но я не смог.
Это views.py
class ItemDetailView(FormMixin, DetailView):
model = Auction
form_class = CommentForm
template_name = "auctions/details.html"
def dispatch(self, request, *args, **kwargs):
listing = get_object_or_404(Auction, pk=request.user.id)
if_exists = Wishlist.objects.filter(user=request.user, item=listing).exists()
return super().dispatch(request, if_exists, *args, **kwargs)
.
.
.
.
.
Это models.py
class Auction(models.Model):
title = models.CharField(max_length=64)
price = models.IntegerField()
created = models.DateTimeField(auto_now_add=True)
image = models.ImageField(null=True, blank=True, upload_to='images/')
category = models.ForeignKey(Category, on_delete=models.CASCADE, default="")
owner = models.ForeignKey(User, on_delete=models.CASCADE, default="")
description = models.TextField(max_length=256)
def __str__(self):
return f"({self.id}: {self.title} , {self.price}, {self.owner})"
def get_absolute_url(self):
return reverse('item-detail', args=[str(self.id)])
class Wishlist(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
item = models.ForeignKey(Auction, on_delete=models.CASCADE, null=True)
def __str__(self):
return f"{self.item}"
Это urls.py
path("item/<int:pk>", ItemDetailView.as_view(), name="item-detail"),
И я думаю, что html должен быть примерно таким, потому что функция должна возвращать True или False.
{% if not if_exists %}
</li style="display:inline-block">
<a href="{% url 'wishlist' auction.pk %}" class="btn btn-outline-warning">Add To Wishlist</a>
</ul>
{% else %}
</li style="display:inline-block">
<a href="{% url 'wishlist-delete' auction.pk %}" class="btn btn-outline-warning">Remove From Wishlist</a>
</ul>
{% endif %}
По моей логике в DetailView вызывается функция, когда пользователь хочет посмотреть детали элементов. Результат - ошибки нет, но html не показывает кнопку "добавить", когда она должна это делать, так что, вероятно, эта функция возвращает None или False. (или даже не работает), но не True. Я новичок в программной инженерии, поэтому мой код может быть странным. Я открыт для любой логики или предложений. Заранее спасибо.