Я начинающий программист Django, пытаюсь создать базовый сайт электронной коммерции .Я хочу добавить выбранные элементы, нажав кнопку «Добавить в корзину» в базу данных и загрузить ту же домашнюю страницу. При нажатии на эту кнопку появляется ошибка: MultiValueDictKeyError at / 'add_cart' Пожалуйста, предложите любой другой хороший метод к тому же, если требуется
Мой шаблон для кнопки:
<form action="get">
<button
type="submit"
class="button1"
value="{{ product.id }}"
name="add_cart">Add to Cart
</button>
</form>
views.py:
def home(request):
products = Products.objects
product_id=None
if request.method == "POST":
product_id = request.POST['add_cart']
if product_id:
product = Products.objects.get(id=int(product_id))
if product:
product.c_title =product.title
product.c_description = product.description
product.c_price = product.price
product.customer = request.user
product.save()
return redirect(request, 'products/home.html',{'products': products})
return render(request, 'products/home.html',{'products': products})
models.py Здесь я использовал префикс 'c_' в элементах для хранения элементов корзины для этого пользователя
class Products(models.Model):
title = models.CharField(max_length = 100)
body = models.TextField()
description = models.TextField()
price = models.IntegerField()
image = models.ImageField(upload_to = 'images/')
customer = models.ForeignKey(User, on_delete = models.CASCADE)
total_items = models.IntegerField(default = 1)
icon = models.ImageField(upload_to = 'images/')
c_title = models.CharField(max_length = 100)
c_description = models.TextField()
c_price = models.IntegerField()
c_total_items = models.IntegerField(default = 1)
urls.py
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from products import views as product_views
urlpatterns =[
path('admin/', admin.site.urls),
# path('', include('products.urls')),
path('', product_views.home,name='home'),
path('accounts/', include('accounts.urls')),
path('cart/', include('cart.urls'))
] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)