Я пытаюсь создать функцию редактирования продукта в своем приложении 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
:
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1.0">
<title>Edit Product</title>
<!-- Bootstrap CSS -->
<link href = "https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel = "stylesheet">
<style>
body {
padding-top: 50px;
}
.container {
max-width: 600px;
margin: auto;
}
.form-group label {
font-weight: bold;
}
.form-actions {
text-align: right;
}
.form-actions button {
margin-left: 10px;
}
</style>
</head>
<body>
<div class = "container">
<h2 class = "mb-4">Edit Product</h2>
<form method = "POST" enctype = "multipart/form-data" action = "{% url 'vendorpannel:edit_product' product.id %}">
{% csrf_token %}
<div class = "form-group">
<label for = "id_title">Title</label>
<input type = "text" class = "form-control" id = "id_title" name = "title" value = "{{ product.title }}" required>
</div>
<div class = "form-group">
<label for = "id_description">Description</label>
<textarea class = "form-control" id = "id_description" name = "description" rows = "4" required>{{ product.description }}</textarea>
</div>
<div class = "form-group">
<label for = "id_price">Price ($)</label>
<input type = "number" class = "form-control" id = "id_price" name = "price" value = "{{ product.price }}" step = "0.01" required>
</div>
<div class = "form-group">
<label for = "id_status">Status</label>
<input type = "text" class = "form-control" id = "id_status" name = "status" value = "{{ product.status }}" required>
</div>
<div class = "form-group">
<label for = "id_date">Date</label>
<input type = "date" class = "form-control" id = "id_date" name = "date" value = "{{ product.date }}" required>
</div>
<div class = "form-group">
<label for = "id_image">Product Image</label>
<input type = "file" class = "form-control-file" id = "id_image" name = "image">
{% if product.image %}
<img src = "{{ product.image.url }}" alt = "{{ product.title }}" class = "img-thumbnail mt-2" style = "max-width: 200px;">
{% endif %}
</div>
<div class = "form-actions">
<a href = "{% url 'vendorpannel:vendor_shop' %}" class = "btn btn-secondary">Cancel</a>
<button type = "submit" class = "btn btn-primary">Save Changes</button>
</div>
</form>
</div>
<!-- Bootstrap JS and dependencies -->
<script src = "https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src = "https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js"></script>
<script src = "https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>
Редактировать:
URL.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.Я использую Джанго 3.2.
2. В моей модели Product
есть поле первичного ключа с именем id
.
2.Я пробовал использовать get_object_or_404
вместо Product.objects.get()
, но все равно получаю ту же ошибку.
Заранее спасибо за вашу помощь!
Я отредактировал эти данные, пожалуйста, проверьте это...
у тебя есть поле pid
и id
? ваш шаблон отправляет id
, но ваш просмотр проверяет pid
@folengateis я понял, спасибо... теперь все работает
Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительную информацию, которая поможет другим понять, как это относится к заданному вопросу. Более подробную информацию о том, как писать хорошие ответы, вы можете найти в справочном центре.
Вы использовали 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
.
Можете поделиться
urls.py
?