django产品删除

bzzcjhmw  于 2023-04-13  发布在  Go
关注(0)|答案(2)|浏览(101)

我正在尝试删除产品特定的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/
屏幕:
是否要删除产品“第二个产品”?是取消

omhiaaxx

omhiaaxx1#

方法的名称总是用 * 全部大写 * 写成,所以'POST''GET'等:

from django.shortcuts import get_object_or_404

def product_delete_view(request, id):
    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)

注意:通常使用**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请求。

m2xkgtsf

m2xkgtsf2#

这里有一个简单的方法来解决你的问题

enter code heredef product_delete_view(request, id):
# if request.method == 'POST':
obj = get_object_or_404(Product, pk=id)
obj.delete()
context = {
    'object': obj
}
return render(request, ''products/products_delete.html'', context)

我注解了'if'条件,因为它给了我一个'unbound error',但我向你保证代码按预期工作。()'也是一个'未绑定错误',所以为了避免,我将它们定义为彼此相邻,这样' obj.delete()'将直接引用'obj = get_object_or_404(Product,pk=id)'。我可能在这里使用了错误的术语,因为我是Django的初学者,但我希望解释被理解了?

相关问题