我正在尝试删除产品特定的ID。按下“是”后,没有发生任何事情。
def product_delete_view(request, id):
obj = Product.objects.get(id=id) #also did try obj = Product.objects.get(id=id).delete()
# also did try obj = get_object_or_404(Product, id=id)
if request.method == 'Post':
obj.delete()
context = { 'object': obj }
return render(request, 'products/products_delete.html', context)
网址:
path('del/<int:id>/delete/', product_delete_view, name='product_delete'),
template:
<form action='.' method='POST'>{% csrf_token %}
<h1>Do you want to delete the prodcut "{{ object.title }}"?</h1>
<p><input type='submit' value='YES' /> <a href = '../'>Cancel</a></p>
</form>
http://127.0.0.1:8000/del/2/delete/
屏幕:
是否要删除产品“第二个产品”?是取消
2条答案
按热度按时间omhiaaxx1#
方法的名称总是用 * 全部大写 * 写成,所以
'POST'
,'GET'
等:注意:通常使用**
get_object_or_404(…)
[Django-doc]比直接使用.get(…)
[Django-doc]更好。如果对象不存在,例如用户自己修改了URL,则get_object_or_404(…)
将返回 HTTP 404 Not Found 响应,而使用.get(…)
将返回 HTTP 500 Server Error。注意:如果POST请求成功,您需要做一个
redirect
**[Django-doc]来实现Post/Redirect/Get pattern [wiki],这样就避免了在用户刷新浏览器的时候,您再次发出同样的POST请求。m2xkgtsf2#
这里有一个简单的方法来解决你的问题
我注解了'if'条件,因为它给了我一个'unbound error',但我向你保证代码按预期工作。()'也是一个'未绑定错误',所以为了避免,我将它们定义为彼此相邻,这样' obj.delete()'将直接引用'obj = get_object_or_404(Product,pk=id)'。我可能在这里使用了错误的术语,因为我是Django的初学者,但我希望解释被理解了?