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

Вернуться на верх