Django Product delete

Я пытаюсь удалить определенный идентификатор Prodcut. После нажатия YES ничего не произошло.

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/<><>

<>>>

<>>Экран:

<>>

Вы хотите удалить продукт "второй продукт"? Да Отмена

Имя метода всегда пишется всеми заглавными буквами, поэтому '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 [wiki]. Это позволяет избежать повторения POST-запроса, когда пользователь обновляет браузер. браузер.

Вернуться на верх