形式的 Django 数据未与 POST 一起显示



我目前有一个 UpdateView 和一个用于编辑字段中数据的按钮,但由于某种原因,当我单击编辑按钮时数据未显示。它显示一堆空白字段,除非我转到地址栏并按回车键,基本上请求相同的页面。然后显示所有数据。

单击"编辑"时不起作用,在地址栏中按回车键时有效:

/inventory/update/7/

views.py

class ProductUpdate(UpdateView):
model = Product
fields = [
'manufacturer',
'part_number',
'description',
'vendor',
'upc',
'stock_quantity',
'unit_cost',
'sale_price',
]

urls.py

# /inventory/update/<pk>
url(r'update/(?P<pk>[0-9]+)/$', views.ProductUpdate.as_view(), name='product-update'),

索引.html

<div class="col-sm-6">
<ul class="list-group">
{% for product in all_products %}
<li class="list-group-item">
<a href="{% url 'inventory:product_detail' product.id %}"><span style="font-size: 1.6em;">{{ product.manufacturer }}: {{ product.part_number }}</span></a>
<form action="{% url 'inventory:product-delete' product.id %}" method="post" style="display: inline">
{% csrf_token %}
<button type="submit" class="btn btn-danger btn-sm float-right" style="margin-left: 10px; margin-top: 4px;">Delete</button>
</form>
<form action="{% url 'inventory:product-update' product.id %}" method="post" style="display: inline">
{% csrf_token %}
<button type="submit" class="btn btn-warning btn-sm float-right" style="margin-top: 4px;">Edit</button>
</form>
</li>  
{% endfor %}
</ul>
</div>

如果我将更新表单方法更改为GET而不是POST则当我单击按钮时它可以工作,但我的地址栏显示如下。

/inventory/update/7/?csrfmiddlewaretoken=34WWjKDIDsNpZdmEmef9cr3tCoCO0V7jO3uks5qXFzSVKu1uAklqUA3ihaGBGaRK

我还尝试将{{ form.as_p }}POST一起使用,但这也没有使数据显示。

据我所知(如果我弄错了,请原谅我(,索引中的"编辑"按钮.html的目的是为您提供一个包含模型实例(产品(的初始数据(预填充(的编辑表单。

如果该按钮只是为了获取UpdateView的一种形式,那么,

为什么要首先将编辑按钮放在带有method="post"<form>标签内?"编辑"按钮只需将存储在模型实例中的信息引入即可。

除此之外,为什么您需要一个 POST 请求获取更新产品的表单(型号 = 产品(。

为了获取信息,使用POST请求是不明智的。

另一个注意事项,我希望您意识到{% csrf_token %}令牌仅适用于POST请求。根本不需要{% csrf_token %}

当您只需要一个 URL 时:/inventory/update/7那么为什么不使用<a>标签呢?

试试这个:

<div class="col-sm-6">
<ul class="list-group">
{% for product in all_products %}
<li class="list-group-item">
<a href="{% url 'inventory:product_detail' product.id %}"><span style="font-size: 1.6em;">{{ product.manufacturer }}: {{ product.part_number }}</span></a>
<a href="{% url 'inventory:product-delete' product.id %}">Delete</a>
<a href="{% url 'inventory:product-update' product.id %}">Edit</a>
</li>  
{% endfor %}
</ul>
</div>

我希望这对你有所帮助。如果我的问题弄错了,请纠正我。谢谢。

最新更新