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-запроса, когда пользователь обновляет браузер. браузер.