Вместо:
{% if product in Cart.products.all %}
<a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Add to Cart</a>
{% else %}
<a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Remove from Cart</a>
{% endif %}
Вы можете попробовать вот так:
{% if not product.cart_set.exists %}
<a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Add to Cart</a>
{% else %}
<a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Remove from Cart</a>
{% endif %}
Я использую reverse relation
для проверки если существует какая-либо корзина для этого продукта. Но он проверяет, есть ли этот продукт в любой корзине. Что не должно быть правильным, потому что оно должно проверять, находится ли продукт в указанной c корзине.
Теперь, если вы хотите быть более точным c, если этот продукт существует в определенной корзине, я Рекомендую сделать этот расчет в представлениях. Например, в представлении продукта вы можете сделать это следующим образом:
from django.db.models import Case, When, Value, BooleanField
cart = Cart.objects.first()
products = Product.objects.annotate(in_cart=Case(When(cart__pk=cart.id,then=Value(True)),default=Value(False),output_field=BooleanField()))
return render(request, template.html, context={'products':products})
и проверить шаблон:
{% if not product.in_cart %}
<a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Add to Cart</a>
{% else %}
<a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Remove from Cart</a>
{% endif %}
Я использую django 'conditional expression
здесь, чтобы проверить, есть ли товар в определенной корзине.
Возможно, в вашем коде произошла более простая ошибка:
Добавьте , а не в вашей if
else
логи c:
{% if not product in Cart.products.all %}
<a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Add to Cart</a>
{% else %}
<a href="{% url 'add-to-cart' product.slug %}" class="btn btn-primary">Remove from Cart</a>
{% endif %}