我目前有一个UpdateView和一个按钮来编辑字段中的数据,但由于某些原因,单击我的编辑按钮时数据没有显示。它显示了一堆空字段,除非我转到地址栏并按Enter键,基本上请求同一页面。然后显示所有数据。
单击编辑时不起作用,按下输入地址栏时起作用:
/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'),
的index.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
一起使用,但这也没有显示数据。
答案 0 :(得分:0)
根据我的理解(原谅我,如果我弄错了), index.html 中的编辑按钮可以帮助您获得编辑表格。模型实例(产品)的初始数据(预填充)。
如果按钮只是为了获取 UpdateView 的形式,那么,
为什么首先将编辑按钮放在<form>
标记中,并带有method="post"
? “编辑”按钮只需要将信息存储在模型实例中。
除此之外,为什么还需要 POST请求到获取表格来更新产品(型号=产品)。
要获取信息,使用 POST 请求是不明智的。
另一个注意事项我希望您意识到{% csrf_token %}
令牌仅适用于 POST 请求。根本不需要{% csrf_token %}
。
如果您只需要/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>
我希望这会对你有所帮助。如果我的问题不正确,请纠正我。感谢。