Django: Получение значения из html for-loop для views.py

Я застрял с получением значения из цикла for html-страницы.

Вот моя установка: У пользователя есть поле ввода, которое использует функцию автозаполнения. Эта функция использует модель shop-Model в Django. После отправки, товар будет добавлен в модель Shopping_List-Model в Django. Он будет отображаться в другом div страницы. В настоящее время это работает без проблем.

Каждый товар находится в одной строке таблицы, включающей кнопку для удаления товара из списка покупок. Кнопка как таковая работает. Я пытался вывести что-то при нажатии на кнопку. Но я не могу получить значение, то есть название товара, из строки таблицы. Оно всегда возвращает значение none. С помощью значения я хотел бы удалить продукт из списка покупок.

Любые предложения будут высоко оценены!

Вот мой код:

HTML

<div>
<!--Input field and autocomplete-->
<form id="product_add" action="{% url 'shop' %}" method="post">
{% csrf_token %}
<input type="text" name="shop_product" id="shop_product">

   <!--Code for autocomplete-->
   <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
   <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
   <script>
      $(function () {
         $("#shop_product").autocomplete({
            source: "{% url 'shop' %}",
            minLength: 2
            });
         });
   </script>
<input type="submit" name="button_add" value="Add">
</form>
</div>

<div>
<table>
{% for item in items %}
<tr>
   <form id="shop_delete" action="{% url 'shop_delete' %}" method="post">
      <td name="product" id="product">{{ item.product }}</td>
      <td><button type="submit" name="delete">X</button></td>
   </form>
</tr>
{% endfor %}
</table>
</div>

views.py

def shop(request):
    if request.method == "POST":
        if request.POST["button_add"] == "Add":
            user = request.user
            product = request.POST["shop_product"]
            date=datetime.date.today()

            if product != "": Shopping_List.objects.create(user=user, date=date, product=product)
        else:
            print("delete")

    if 'term' in request.GET:
        qs = Shop.objects.filter(product__icontains=request.GET.get('term'))
        items = list()
        for product in qs:
            items.append(product.product)
        # titles = [product.title for product in qs]
        return JsonResponse(items, safe=False)
    
    items = Shopping_List.objects.all().filter(user=request.user, date=datetime.date.today())
    return render(request, "shop.html", {
        "items": items
    })

def shop_delete(request):
    if request.method == "POST":
        product = request.POST.get("product")
        print(product)
    return redirect('shop')

Ваша форма не содержит никаких входных данных и, следовательно, никакие входные данные не передаются с POST-запросом.

#This is not an input
<td name="product" id="product">{{ item.product }}</td>

Когда вы используете корректную форму input, вы сможете получить название продукта в представлении.

Например, вы можете добавить скрытое поле с названием продукта. Тогда вам не нужно будет переделывать элементы таблицы.

   <form id="shop_delete" action="{% url 'shop_delete' %}" method="post">
      <td id="product">{{ item.product }}</td>
      <input type="hidden" value="{{item.product}}" name="product">
      <td><button type="submit" name="delete">X</button></td>
   </form>
Вернуться на верх