我想编辑我的产品详细信息Django

我想编辑我的产品详细信息Django,django,django-models,django-forms,django-templates,django-views,Django,Django Models,Django Forms,Django Templates,Django Views,我正在尝试编辑我收集的详细信息,使用带有POST方法的表单,现在我想编辑这些详细信息。我试过了,但没用你们能告诉我我做错了什么吗 编辑文章视图 @login_required() def edit_product(request, product_id): form = NewPro() edit = get_object_or_404(Product, product_id) if request.method == 'POST': form = New

我正在尝试编辑我收集的详细信息,使用带有POST方法的表单,现在我想编辑这些详细信息。我试过了,但没用你们能告诉我我做错了什么吗

编辑文章视图

@login_required()
def edit_product(request, product_id):
    form = NewPro()
    edit = get_object_or_404(Product, product_id)
    if request.method == 'POST':
        form = NewPro(request.POST, request.FILES)
        if form.is_valid():
            form.save()

            return redirect('product')
        else:
            form = NewPro()
    return render(request, "default/edit.html", {'form': form, 'edit': edit}) 
Url模式

path('<int:product_id>/edit_product', views.edit_product, name='edit_product')
path('/edit\u product',views.edit\u product,name='edit\u product')
我正在尝试添加按钮的Html

{% extends 'default/dashboard.html' %}
{% block content %}
    <h1>Products Details </h1>
    <p>These are the details of your product, {{ user.username }}</p>
       <ul>
       <li>{{ product_details.name }}</li>
       <li>{{ product_details.price }}</li>
       <li>{{ product_details.category }}</li>
       <li>{{ product_details.store }}</li>
       <li>{{ product_details.user }}</li>

       </ul>
      <a href={% url 'edit_product' edit.id %}>
      <button>Edit Product</button>
      </a>
{% endblock %}
{%extends'default/dashboard.html%}
{%block content%}
产品详情
以下是您的产品{{user.username}的详细信息

  • {{product_details.name}
  • {{product_details.price}}
  • {{product_details.category}
  • {{product_details.store}
  • {{product_details.user}
{%endblock%}
我试图在其中显示表单的Html

{% extends 'default/dashboard.html' %}
<html>
<head><title>E-Commerce App</title></head>
 {% block content %}
    <h2>Edit Product</h2>
    <form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">submit</button>
   </form>
{% endblock %}
</html>
{%extends'default/dashboard.html%}
电子商务应用程序
{%block content%}
编辑产品
{%csrf_令牌%}
{{form.as_p}}
提交
{%endblock%}
我想用这张卡片代替你给我的那张

<div class="card-deck">
  <div class="card">
    <img class="card-img-top" src=".../100px200/" alt="Card image cap">
    <div class="card-body">
      <h5 class="card-title">Card title</h5>
      <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
      <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
    </div>
  </div>
  <div class="card">
    <img class="card-img-top" src=".../100px200/" alt="Card image cap">
    <div class="card-body">
      <h5 class="card-title">Card title</h5>
      <p class="card-text">This card has supporting text below as a natural lead-in to additional content.</p>
      <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
    </div>
  </div>
  <div class="card">
    <img class="card-img-top" src=".../100px200/" alt="Card image cap">
    <div class="card-body">
      <h5 class="card-title">Card title</h5>
      <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</p>
      <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
    </div>
  </div>
</div>

卡片标题

这是一张较长的卡片,下面的支持文本是附加内容的自然引入。这个内容有点长

上次更新是在3分钟前

卡片标题

此卡片具有以下支持文本,作为附加内容的自然引入

上次更新是在3分钟前

卡片标题

这是一张更宽的卡片,下面的支持文本是附加内容的自然引入。这张卡片的内容甚至比第一张要长,以显示等高动作

上次更新是在3分钟前


您必须将要编辑的产品实例传递到表单中

@login_required()
def edit_product(request, product_id):

    product_to_edit = get_object_or_404(Product, pk=product_id)
    form = NewPro(instance=product_to_edit)
    if request.method == 'POST':
        form = NewPro(request.POST, request.FILES, instance=product_to_edit)
        if form.is_valid():
            form.save()

            return redirect('product')
        else:
            form = NewPro(instance=product_to_edit)
    return render(request, "default/edit.html", {'form': form, 'product': product_to_edit})
在评论中,您询问如何在卡片中显示所有产品,以便每行有4个产品。试试这个

<div class="container">
    <div class="row">
        {% for product in products %}
          <div class="col-sm-3">
               <div class="card" style="width: 18rem;">
                  <img class="card-img-top" src="..." alt="Card image cap">
                  <div class="card-body">
                    <h5 class="card-title">{{ product.title }}</h5>
                    <p class="card-text">{{ product.description }}</p>
                    <a href="{% url "edit-product" product.id %}" class="btn btn-primary">Edit Product</a>
                  </div>
                </div>
            </div>
        {% endfor %}
    </div>
</div>
模板:

<div class="container">
    {% for product_list in products %}
      <div class="row">
          <div class="card-deck">
              {% for product in product_list %}
                  <div class="card">
                    <img class="card-img-top" src=".../100px200/" alt="Card image cap">
                    <div class="card-body">
                      <h5 class="card-title">Card title</h5>
                      <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
                      <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
                    </div>
                  </div>
              {% endfor %}
            </div>
      </div>
    {% endfor %}
</div>

{products%}中产品列表的%
{product_list%}中产品的%
卡片标题

这是一张较长的卡片,下面的支持文本是附加内容的自然引入。这个内容有点长

上次更新是在3分钟前

{%endfor%} {%endfor%}
(希望详细信息视图模板的对象名称是
产品详细信息
)是的,我在那里也犯了一个错误谢谢!)
<div class="container">
    {% for product_list in products %}
      <div class="row">
          <div class="card-deck">
              {% for product in product_list %}
                  <div class="card">
                    <img class="card-img-top" src=".../100px200/" alt="Card image cap">
                    <div class="card-body">
                      <h5 class="card-title">Card title</h5>
                      <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
                      <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
                    </div>
                  </div>
              {% endfor %}
            </div>
      </div>
    {% endfor %}
</div>