#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) ошибку целостности