Есть несколько вещей, которые вы могли бы улучшить в своем коде:
1) Если продукт не существует (у вас "аппаратное соединение" product_id
, чтобы быть 1
, это может быть так) использовать ведение журнала , бывают ситуации. * Заявления 1007 * будет недостаточно.
2) Если товар уже есть в корзине, вы удалите его, оставив корзину пустой.Возможно, вы могли бы увеличить количество?
3) Условие if product_id in cart_obj.products.all()
всегда будет False
cart_obj.products.all()
, которое вернет набор запросов для Product
, а не для значений идентификатора, у вас есть две опции:
if product_id in cart_obj.products.values_list("id", flat=True)
или
if product_obj in cart_obj.products.all()
4) Я не видел ваш шаблон 'carts/home.html'
, но, по вашему мнению, cart_home
, вы не добавляете продукты в контекст представления и, поКстати, поскольку вы можете получить доступ к продуктам в корзине через саму корзину (они связаны), вам не нужна строка products = cart_obj.products.all()
.Просто добавьте cart_obj
в контекст просмотра
def cart_home(request):
cart_obj, new_obj = Cart.objects.new_or_get(request)
return render(request, 'carts/home.html', {"cart": cart_obj})
и напишите в шаблоне код, подобный следующему:
<ul>
{% for product in cart.products.all %}
<li>{{ product.title }}</li>
{% endfor %}
</ul>
Надеюсь, вы сможете найти ошибку при проверке одного из них,Удачного кодирования!