ValueError: Поле 'id' ожидало число, но получило ''
Я хотел бы попросить немного помощи относительно кода, так как когда я запускаю его, он сообщает мне следующую ошибку:
введите описание изображения здесь
Вот представления и код
def add(request):
cart = get_or_create_cart(request)
producto = Producto.objects.get(pk=request.POST.get('product_id'))
cart.productos.add(producto)
return render(request, 'carts/add.html', {
'producto': producto
})
введите описание изображения здесь
введите описание изображения здесь
Вы передаете product_id в add views как post данные, но по умолчанию django views обрабатывает GET запрос. Поэтому, либо измените views, чтобы они включали product_id в качестве аргумента, и эта функция будет работать, либо измените функцию для обработки post запроса.
<def add(request, product_id):
cart = get_or_create_cart(request)
producto = Producto.objects.get(pk=product_id)
cart.productos.add(producto)
return render(request, 'carts/add.html', {
'producto': producto
})
и ваши шаблоны url выглядят следующим образом
path('<int:product_id>/', add, name='add')
Использование POST запроса
def add(request):
if request.method == "POST":
cart = get_or_create_cart(request)
producto = Producto.objects.get(pk=request.POST.get('product_id'))
cart.productos.add(producto)
return render(request, 'carts/add.html', {
'producto': producto
})
else:
# something you would like (GET method)
Добавьте primary_key=True
в колонку cart_id
.
Поскольку вы не добавили его, django добавил поле pk id
, что и ожидается при запросе.
После изменения сделайте так, чтобы код шаблона использовал cart_id
вместо id