Вызов функции в 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. Я новичок в программной инженерии, поэтому мой код может быть странным. Я открыт для любой логики или предложений. Заранее спасибо.

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