Django View:尝试编辑产品时出现 `DoesNotExist` 错误

问题描述 投票:0回答:1

我正在尝试在 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>

编辑:

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()
,但仍然遇到相同的错误。

预先感谢您的帮助!

python django django-models django-views django-templates
1个回答
0
投票

你尝试过这个吗?

在网址末尾添加

/

为此改变

edit_product/<pid>
edit_product/<pid>/

© www.soinside.com 2019 - 2024. All rights reserved.