Почему моя сессия Django не хранит ключи правильно, когда в URLconf используется конвертер путей?
Я работаю над приложением корзины в моем проекте электронной коммерции и наткнулся на эту ошибку, которую я не могу понять. Когда пользователь добавляет товар в корзину, он должен хранить id товара и количество в словаре. Количество должно увеличиваться, если пользователь добавляет больше одного и того же товара.
Я заметил, что когда я указываю в URLconf преобразователь путей 'int', это ведет себя не так, как ожидалось. Когда пользователь добавляет еще одно количество того же самого товара, вместо того, чтобы увеличить текущее значение, он добавляет в словарь еще один ключ типа string.
Форма для принятия желаемого количества:
<form action="{% url 'add_to_basket' product.id %}" method="POST">
{% csrf_token %}
<div class="row justify-content-center">
<div class="col-10 col-md text-md-end">
<label class="col-form-label" for="qty_input_{{ product.id }}">Quantity:</label>
</div>
<div class="col-10 col-md">
<input name="quantity" type="number" class="form-control" value="1" min="1" max="99"
id="qty_input_{{ product.id }}">
</div>
<div class="col-10 col-md mt-2 mt-md-0">
<input type="submit" class="btn bg-red btn-outline-dark border-0" value="Add to Basket">
</div>
<input type="hidden" name="redirect_url" value="{{ request.path }}">
</div>
</form>
Вид:
def add_to_basket(request, product_id):
if request.method == 'POST':
quantity = int(request.POST['quantity'])
basket = request.session.get('basket', {})
url = request.POST['redirect_url']
if product_id in basket:
basket[product_id] += quantity
else:
basket[product_id] = quantity
request.session['basket'] = basket
print(request.session['basket'])
return redirect(url)
Urlconf:
urlpatterns = [
path('', views.basket, name='basket'),
path('<int:product_id>', views.add_to_basket, name='add_to_basket')
]
Словарь после первого добавления пользователем элемента (в данном случае 2 элемента):
{1: 2}
Дикционарий после того, как пользователь второй раз добавит предмет (в этот раз 3):
{'1': 2, 1: 3}
Все работает, если я не использую конвертер путей, но мне просто интересно, что происходит и что я делал неправильно. Большое спасибо!