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()
, но все равно получаю ту же ошибку.
Заранее спасибо за помощь!
- Перейдите на страницу администратора .
- Проверьте ваш "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
ошибку.