Когда зарегистрированный пользователь пытается добавить товар в корзину, он выдает сообщение о внутренней ошибке сервера: /update_item/

#javascript #python #django #e-commerce #internal-server-error

#javascript #python #django #электронная коммерция #внутренняя ошибка сервера

Вопрос:

Когда гостевой пользователь добавляет товары, это работает нормально, но когда зарегистрированный пользователь пытается добавить товар в корзину, он выдает ошибку.

 Internal Server Error: /update_item/
    Traceback (most recent call last):
  File "C:UsersvaruniAppDataLocalProgramsPythonPython39libsite-packagesdjangocorehandlersexception.py", line 34, in inner
    response = get_response(request)
  File "C:UsersvaruniAppDataLocalProgramsPythonPython39libsite-packagesdjangocorehandlersbase.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:UsersvaruniAppDataLocalProgramsPythonPython39libsite-packagesdjangocorehandlersbase.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
TypeError: updateItem() missing 1 required positional argument: 'customer'
 

Вот мой update_item в views.py:

 def updateItem(request, customer):
    data = json.loads(request.body)
    productId = data['productId']
    action = data['action']
    
    print('Action: ',action)
    print('productId: ',productId)
    
    product = Product.objects.get(id = productId)
    order, created = Order.objects.get_or_create(customer = request.user.customer, complete= False)
    
    orderItem, created = OrderItem.objects.get_or_create(order= order, product= product)
    
    if action=='add':
        orderItem.quantity = (orderItem.quantity   1)
    elif action == 'remove' :
        orderItem.quantity = (orderItem.quantity - 1)
    
    orderItem.save()
    
    if orderItem.quantity <= 0:
        orderItem.delete()
    
    return JsonResponse('item added', safe=False)
 

это мой store.html где определено действие кнопки добавить в корзину:

 {% extends 'store/main.html' %}
{% load static %}

{% block content %}
    <div class="row">
        {% for prod in products %}
        <div class="col-lg-4">
            <img class="thumbnail" src="{{prod.imageURL}}">
            <div class="box-element product">
                <h6><strong>{{prod.name}}</strong></h6>
                <hr>
                <button data-product={{prod.id}} data-action="add" class="btn btn-outline-secondary add-btn update-cart">Add to Cart</button>
                <a class="btn btn-outline-success" href="#">View</a>
                <h4 class="d-inline float-right">{{prod.price}} Rs.</h4>
            </div>
        </div>
        {% endfor %}
    </div>
{% endblock content %}
 

Вот мой urls.py:

 urlpatterns = [
    path('', views.store, name='store'),
    path('cart/', views.cart, name='cart'),
    path('register/', views.registerPage, name='register'),
    path('login', views.loginPage, name='login'),
    path('logout', views.logoutPage, name='logout'),
    path('checkout/', views.checkout, name="checkout"),
    path('update_item/', views.updateItem, name="update_item"),
    path('process_order/', views.processOrder, name="process_order"),
]
 

Пожалуйста, дайте мне знать, если требуется какая-либо другая информация.

Комментарии:

1. конечным точкам передается только запрос… но ваша функция написана таким образом, что для нее требуется второй аргумент customer (который не отправляется).

2. удалить customer параметр из updateItems параметров, т.е. Использовать def updateItem(request): вместо def updateItem(request, customer):

3. да, это сработало! Спасибо!!