Django View: Ошибка `DoesNotExist` при попытке отредактировать продукт

Я пытаюсь создать функцию редактирования товара в моем Django-приложении, но сталкиваюсь с ошибкой DoesNotExist, когда пытаюсь получить доступ к странице редактирования товара.

Вот моя функция просмотра:

@login_required
def edit_product(request, pid):
    product = Product.objects.get(pid=pid)
    if request.method == "POST":
        form = AddProductForm(request.POST, request.FILES, instance=product)
        if form.is_valid():
            new_product = form.save(commit=False)
            new_product.user = request.user  # assuming there is a user field in the Product model
            new_product.save()
            form.save_m2m()  # Save many-to-many relationships
            return redirect("vendorpannel:dashboard")
        else:
            # Print form errors for debugging
            print(form.errors)
    else:
        form = AddProductForm(instance=product)

    context = {
        "form": form,
        "product": product,
    }
    return render(request, "vendorpannel/edit-product.html", context)

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

DoesNotExist at /vendorpannel/edit_product/11
Product matching query does not exist.

Я проверил свою базу данных, и продукт с указанным pid существует. Я не уверен, что вызывает эту ошибку.

Может ли кто-нибудь помочь мне определить проблему и предложить решение?

если тебе нужен мой template:

Редактирование:

urls.py:

from django.urls import path
from vendorpannel import views

app_name = 'vendorpannel'

urlpatterns = [
    path('vendor_pannel1/', views.vendor_pannel1, name='vendor_pannel1'),
    path('vendor_signup/', views.vendor_signup, name='vendor_signup'),
    path('login_view/', views.login_view, name='login_view'),
    path('vendor_shop/', views.vendor_shop, name='vendor_shop'),
    path('vendor_tickets/', views.vendor_tickets, name='vendor_tickets'),
    path('vendor_user/', views.vendor_user, name='vendor_user'),
    path('vendor_settings/', views.vendor_settings, name='vendor_settings'),
    path('add_product/', views.add_product, name='add_product'),
    path('edit_product/<pid>', views.edit_product, name='edit_product'),
]

Дополнительная информация:

1.Я использую Django 3.2. 2.Моя модель Product имеет поле первичного ключа с именем id. 2.Я пробовал использовать get_object_or_404 вместо Product.objects.get(), но все равно получаю ту же ошибку.

Заранее спасибо за помощь!

  1. Перейдите на страницу администратора
  2. .
  3. Проверьте ваш "11"-урл, существует ли он на самом деле или нет. Возможно, у вас есть некоторые проблемы с урлами. Еще одна мысль - вам нужно вставить эту строку: ath('edit_product/', views.edit_product, name='edit_product'), использовать / после pid

Вы использовали pid в представлениях, но пытались получить к нему доступ в шаблонах с помощью product.id. Один из способов исправить это - изменить pid в product = Product.objects.get(pid=pid) на id. Также я предлагаю вам использовать get_object_or_404:

product = get_object_or_404(Product, id=pid)

Затем в вашем urls.py:

path('edit_product/<int:pid>', views.edit_product, name='edit_product'),

Это должно устранить вашу DoesNotExist ошибку.

Вернуться на верх