Я пытался создать систему тележек в Django и хотел передать Размер и Количество товара как <Select>
, введенный в View. Мой шаблон имеет:
<ul class="list-unstyled">
Select Size:
<select name="sizes">
{% for size in product.sizes.all %}
<li class="list-item list-inline-item"><option value="{{size.nameSize}}">{{size.nameSize}}</option> </li>
{% endfor %}
</select>
</ul>
Вот как это выглядит:
Но когда я отправляю его, используя Добавить в корзинуКнопка Я получаю ошибку:
Это код в представлении:
def add_item(request,pk):
product = get_object_or_404(Product,pk=pk)
size = request.POST['sizes']
selectsize = Size.objects.get(nameSize=size)
user = request.user
usercart = Cart.objects.get(owner=user)
newitem = CartItems.objects.create(cart = usercart,product=product,size=selectsize)
items = usercart.cartitems
return render(request,'cart.html',{'cartitems':items})
Я пытаюсь использовать имя размера из шаблона и сравнить имя размера, которое у меня есть в базе данных для этого продукта. Используя:
selectsize = Size.objects.get(nameSize=size)
Мне удалось получить размер с именем 36, поэтому яхотел передать значение 36 из шаблона в переменный размер, используя post.
Но я получил упомянутое сообщение об ошибке, которое, как я считаю, связано с тем, что имя для <select>
является общим для всех <option>
.
Если я могу либо получить альтернативный способ сделать это, либо решить эту ошибку, оба типа решений приветствуются. * Я не использую формы Django, потому что я не знаю, как отображать формы Django, как я показываю свои продукты в корзине и на странице продукта.
ОТВЕТ
Мне не хватало кнопки отправки, и я скорее использовал <a href="{% url 'add_item' product.pk %}>Add To Cart</a>"
для отправки формы, которая не работала. Теперь я заменил его на <button class="btn btn-success" style="margin-top: 10px;" type="submit">Add To Cart New</button>
И в форме «Действие» дается ссылка, на которую я пытался перейти.
<form method="post" enctype="multipart/form-data" action="{% url 'add_item' product.pk %}">
Глупая ошибка на моей стороне.
Спасибо за ответы.