Объект ‘NoneType’ не имеет атрибута ‘id’ в Django

#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()