Удаление объекта в django по двум параметрам с помощью ajax.Объект удаляется во время объявления .Как сохранить объект для использования в шаблонах?
Когда я пытаюсь удалить объект с помощью ajax вызова, оба ID не передаются в url
Получаю url типа
127.0.0:8000/delete//
Объект удаляется во время объявления .Как сохранить объект для использования в шаблонах???
urls.py
path('delete/<int:a_id>/<int:b_id>',views.delete,name="delete")
views.py
def delete(request,a_id,b_id):
obj=Table.objects.get(a_id=a_id,b_id=b_id)
obj.delete()
return render(request,"delete.html",{'obj':obj})
delete.html
<input type="hidden" id="a_id" data-value="{{obj.a_id}}">
<input type="hidden" id="b_id" data-value="{{obj.b_id}}">
script.js
var a_id=$("#a_id").data("value");
var b_id=$("#b_id").data("value");
#some code
$.ajax({
url:'delete/'+ a_id +'/' + b_id,
#some code
});
Вы пытаетесь удалить по щелчку на кнопке или просто по вызову url? Если вы переходите по url, скажем (127.0.0:8000/delete/23/12), он будет удален, когда вы достигнете этой страницы, потому что .
Чтобы предотвратить это, добавьте условие для удаления в запросе, например, и :
def delete(request,a_id,b_id):
obj=Table.objects.get(a_id=a_id,b_id=b_id)
if request.method == "POST": #or DELETE
obj.delete()
#return success redirect or some response
#you can return obj once it's deleted
return render(request,"delete.html",{'obj':obj})
Затем в вызове ajax вы можете добавить тип запроса
$.ajax({
url:your_url,
type:"POST",
data:pass_csrf_token
})
Но я бы рекомендовал сделать отдельное представление для удаления этого. И передавать id в данных ajax секции как
$.ajax({
url:your_url,
type:"POST",
data:{
csrf:token,
a_id:a_id,
b_id:b_id
}
})
Тогда Вид будет
#seperate view to delete obj
def delete_obj(request):
a_id=request.POST.get("a_id") #what you passed in ajax data section
b_id=request.POST.get("b_id")
obj=Table.objects.get(a_id=a_id,b_id=b_id)
if request.method == "POST": #or DELETE
obj.delete()
return JsonResponse("deleted":True) #any response you want