Запрос на сопоставление элементов заказа не существует при попытке добавить товар в корзину

#python #django

Вопрос:

Я пытаюсь добавить в корзину один товар, но столкнулся с проблемой, и теперь я застрял, я пробовал разные способы, но ни один из них не сработал. Пожалуйста, помогите, так как я пытаюсь выучить джанго.

Я прикрепил add_to_cart функцию, urls.py и отслеживание ошибки. Между функциями я добавил функцию печати, она выводит

 Internal Server Error (maybe)
 

Число просмотров:

 @login_required
def add_to_cart(request, slug):
    item = AffProduct.objects.get(slug=slug)
    order_item = OrderItem.objects.get(
        item=item,
        user=request.user,
        ordered=False
    )
    for i in order_item:
        print(i)
    else:
        print("No orders in here")
    order_qs = Order.objects.filter(user=request.user, ordered=False)
    if order_qs.exists():
        order = order_qs[0]
        # check if the order item is in the order
        if order.items.filter(item__slug=item.slug).exists():
            order_item.quantity  = 1
            order_item.save()
            messages.info(request, "This item quantity was updated.")
            return redirect("detailview")
        else:
            order.items.add(order_item)
            messages.info(request, "This item was added to your cart.")
            return redirect("detailview")
    else:
        ordered_date = timezone.now()
        order = Order.objects.create(
            user=request.user, ordered_date=ordered_date)
        order.items.add(order_item)
        messages.info(request, "This item was added to your cart.")
        return redirect("detailview")
 

Вот urls.py:

 path('cart/', views.cart, name='cart'),
path('add-to-cart/<str:slug>/', add_to_cart, name='add-to-cart'),
 

Это моя cart.html:

 {% block content %}
  <main>
    <div class="container">

    <div class="table-responsive text-nowrap">
    <h2>Order Summary</h2>
    <table class="table">
        <thead>
        <tr>
            <th scope="col">#</th>
            <th scope="col">Item title</th>
            <th scope="col">Price</th>
            <th scope="col">Quantity</th>
            <th scope="col">Total Item Price</th>
        </tr>
        </thead>
        <tbody>
        {% for order_item in object.items.all %}
        <tr>
            <th scope="row">{{ forloop.counter }}</th>
            <td>{{ order_item.item.product_title }}</td>
            <td>{{ order_item.item.sale_price }}</td>
            <td>
                <a href=""><i class="fas fa-minus mr-2"></i></a>
                {{ order_item.quantity }}
                <a href="{% url 'core:add-to-cart' order_item.item.slug %}"><i class="fas fa-plus ml-2"></i></a>
            </td>
            <td>
            {% if order_item.item.discount %}
                ${{ order_item.get_total_discount_item_price }}
                <span class="badge badge-primary">Saving ${{ order_item.get_amount_saved }}</span>
            {% else %}
                ${{ order_item.get_total_item_price }}
            {% endif %}
            <a style='color: red;' href="{% url 'core:remove-from-cart' order_item.item.slug %}">
                <i class="fas fa-trash float-right"></i>
            </a>
            </td>
        </tr>
        {% empty %}
        <tr>
            <td colspan='5'>Your cart is empty</td>
        </tr>
        <tr>
            <td colspan="5">
            <a class='btn btn-primary float-right' href='/'>Continue shopping</a>
            </td>
        </tr>
        {% endfor %}
        <!--{% if object.coupon %}
        <tr>
            <td colspan="4"><b>Coupon</b></td>
            <td><b>-${{ object.coupon.amount }}</b></td>
        </tr>
        {% endif %}-->
        {% if object.get_total %}
        <tr>
            <td colspan="4"><b>Order Total</b></td>
            <td><b>${{ object.get_total }}</b></td>
        </tr>
        <tr>
            <td colspan="5">
            <a class='btn btn-warning float-right ml-2' href=''>Proceed to checkout</a>
            <a class='btn btn-primary float-right' href='/'>Continue shopping</a>
            </td>
        </tr>
        {% endif %}
        </tbody>
    </table>

    </div>

    </div>
  </main>

{% endblock content %}
 

Обратная связь выглядит следующим образом:

 Internal Server Error: /onlineshopping/add-to-cart/hp-14-202/
Traceback (most recent call last):
  File "C:UsersuserAppDataLocalProgramsPythonPython39libsite-packagesdjangocorehandlersexception.py", line 47, in inner
    response = get_response(request)
  File "C:UsersuserAppDataLocalProgramsPythonPython39libsite-packagesdjangocorehandlersbase.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:UsersuserAppDataLocalProgramsPythonPython39libsite-packagesdjangocontribauthdecorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "C:blinkmyblinkonlineshoppingviews.py", line 127, in add_to_cart
    order_item = OrderItem.objects.get(
  File "C:UsersuserAppDataLocalProgramsPythonPython39libsite-packagesdjangodbmodelsmanager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:UsersuserAppDataLocalProgramsPythonPython39libsite-packagesdjangodbmodelsquery.py", line 435, in get
    raise self.model.DoesNotExist(
onlineshopping.models.OrderItem.DoesNotExist: OrderItem matching query does not exist.
[10/Aug/2021 16:27:25] "GET /onlineshopping/add-to-cart/hp-14-202/ HTTP/1.1" 500 78902

 

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

1. И если я использую : order_item = OrderItem.objects.filter( item=item, user=request.user, ordered=False ) Я сталкиваюсь с этой ошибкой — Field 'id' expected a number but got <QuerySet []>. И функция печати выводит значение — No orders in here , которое находится в блоке else

Ответ №1:

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

решение 1. обработайте запрос с помощью try и catch.

 try:
    order_item = OrderItem.objects.get(
        item=item,
        user=request.user,
        ordered=False
     )
except:
    order_item = None
 

решение 2:

запрос фильтра fire вместо получения bcoz, если не найден какой-либо элемент, соответствующий условию, он выдаст ошибку, но фильтр не вернет ее, если не найдены соответствующие данные

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

1. В настоящее время мой столик пуст. Я выбираю продукты из разных моделей для отображения в шаблоне, поэтому в элементе заказа ничего нет. С Soln 1: Я сталкиваюсь с этой ошибкой: null value in column "orderitem_id" of relation "onlineshopping_order_items" violates not-null constraint DETAIL: Failing row contains (1, 1, null).

2. при запросе фильтра в нем говорится об ошибке типа: Field 'id' expected a number but got <QuerySet []>.

3. используйте первую() модель.объекты.фильтр().первая()

4. Та же » Неудачная строка содержит (2, 1, null) ошибку целостности