#python #django
#python #django
Вопрос:
Я получаю сообщение об ошибке ‘NoneType’ object has no attribute ‘id’ при открытии URL-адреса, который является этим представлением:
@login_required
def order_checkout_view(request):
product_id = request.session.get("product_id") or None
if product_id == None:
return redirect("/")
product = None
try:
product = Product.objects.get(id=product_id)
except:
return redirect("/")
user = request.user
order_id = request.session.get("order_id")
order_obj = None
new_creation = False
try:
order_obj = Order.objects.get(id=order_id)
except:
order_id = None
if order_id == None:
new_creation = True
order_obj = Order.objects.create(product=product, user=user)
if order_obj != None and new_creation == False:
if order_obj.product.id != product.id:
order_obj = Order.objects.create(product=product, user=user)
request.session['order_id'] = order_obj.id
form = OrderForm(request.POST or None, product=product, instance=order_obj)
if form.is_valid():
order_obj.shipping_address = form.cleaned_data.get("shipping_address")
order_obj.billing_address = form.cleaned_data.get("billing_address")
order_obj.mark_paid(save=False)
order_obj.save()
del request.session['order_id']
return redirect("/success")
return render(request, 'orders/checkout.html', {"form": form, "object": order_obj})
Местоположение исключения находится в этой строке
if order_obj.product.id != product.id:
В базе данных есть существующий продукт, однако означает ли это, что в данном случае Продукт «Отсутствует»? В чем может быть проблема здесь?
Комментарии:
1. поместите отладчик в свой код и проанализируйте, используйте следующее «import pdb;pdb.set_trace ()» где-нибудь в коде, прежде чем вы получите исключение, тогда элемент управления остановится на строке, вы можете посмотреть значения product в оболочке. Используйте ‘n’ для перехода к следующей строке, ‘c’ для продолжения, ссылка: docs.python.org/3/library/pdb.html
2. Является ли поле продукта обнуляемым в модели заказа? Если это так, это может быть причиной вашей ошибки, заказа, не имеющего продукта.
3. Да, файл имеет значение null. Дело в том, почему кажется, что «заказ» не имеет никакого отношения к «продукту». Разве он не должен иметь его, поскольку он есть в базе данных?
4. Есть ли Продукт в таблице продуктов или в таблице заказов есть продукт в своем столбце? Наличие товара в таблице Товаров не означает, что в Заказе будет присутствовать товар.
5. Попробуйте выполнить этот запрос в оболочке
Order.objects.filter(product__isnull=True).count()